如何使用反射包从类路径创建对象

Min*_*uad 0 java reflection

我想创建一个我只知道它的类路径的对象任何帮助将不胜感激.

Bal*_*usC 6

如果你在a中有完整的限定类名String,请使用Class#forName()Class#newInstance().

Object o = Class.forName("com.example.Foo").newInstance();
Run Code Online (Sandbox Code Playgroud)

但是,这需要类已经存在于类路径中并具有(隐式)默认构造函数.

如果不是,并且您具有类的位置URL,则使用URLClassLoader并将其传递给另一个Class#forName()接受它作为参数的方法.

URL url = getItSomehow();
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { url });
Object o = Class.forName("com.example.Foo", true, classLoader).newInstance();
Run Code Online (Sandbox Code Playgroud)

或者,如果您将其File替换为,则将其转换为URL第一个:

File file = getItSomehow();
URL url = file.toURI().toURL();
// Continue with URLClassLoader.
Run Code Online (Sandbox Code Playgroud)