一种使用字符串创建新类的方法

时间:2009-12-25 08:53:38

标签: java reflection

我有一个带有类名的字符串,是否有一种方法(用Java编写)在创建该类的新实例时使用该字符串,以执行以下操作:
object obj = new dataInString
所以dataInString是从字符串中解析出来的。

4 个答案:

答案 0 :(得分:5)

你的意思是Class.forName(String)吗?引用方法的javadoc:

  

返回与具有给定字符串名称的类或接口关联的Class对象。调用此方法等同于:

Class.forName(className, true, currentLoader)
     

其中currentLoader表示当前类的定义类加载器。

     

例如,以下代码片段返回名为Class的类的运行时java.lang.Thread描述符:

Class t = Class.forName("java.lang.Thread")
     

forName("X")的调用会导致名为X的类被初始化。

然后,在返回的Class上调用Class#newInstance()(它必须有一个空的构造函数)。

  

创建由此Class对象表示的类的新实例。该类实例化为具有空参数列表的new表达式。如果尚未初始化,则初始化该类。

答案 1 :(得分:4)

假设该类有一个no-args构造函数,那么下面的代码应该是诀窍

Class<?> clazz = Class.forName("someclass");
Object obj = clazz.newInstance();

如果你需要使用不同的构造函数创建对象,那么你需要做这样的事情:

Constructor<?> ctor = clazz.getConstructor(ArgClass.class, Integer.TYPE);
Object obj = ctor.newInstance(arg, Integer.valueOf(42)); 

在任何一种情况下都需要处理许多已检查的异常...

答案 2 :(得分:3)

您可以使用reflection

答案 3 :(得分:0)

使用反射来实例化对象。一个简单的class.forName(“com.blah.blah”)应该是寻找有关反射的更多信息的良好起点。