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

时间:2010-12-13 20:34:42

标签: java reflection

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

2 个答案:

答案 0 :(得分:5)

如果您在String中拥有完整的合格类名,请使用Class#forName()Class#newInstance()

Object o = Class.forName("com.example.Foo").newInstance();

然而,这要求类已经存在于类路径中并且具有(隐式)默认构造函数。

如果不是,并且您在URL中拥有该班级的位置,则使用URLClassLoader并将其传递给另一个Class#forName()方法,该方法将其作为参数接受。

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

或者,如果您使用的是File,请先将其转换为URL

File file = getItSomehow();
URL url = file.toURI().toURL();
// Continue with URLClassLoader.

答案 1 :(得分:2)

你的意思是?

Class c = Class.forName("java.lang.String");