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

Java 使用字符串创建新类的方法,java,reflection,Java,Reflection,我有一个带有类名称的字符串,在创建该类的新实例时,是否有一种方法(用Java编写)使用该字符串来执行以下操作: object obj=新数据指令。 因此,dataInString是从字符串中解析出来的 使用反射来实例化对象。一个简单的class.forName(“com.blah.blah”)应该是查找有关反射的更多信息的良好起点 使用反射来实例化对象。一个简单的class.forName(“com.blah.blah”)应该是查找有关反射的更多信息的良好起点 你可以使用。你可以使用。你是说类似

我有一个带有类名称的字符串,在创建该类的新实例时,是否有一种方法(用Java编写)使用该字符串来执行以下操作:
object obj=新数据指令。

因此,dataInString是从字符串中解析出来的

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

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

你可以使用。

你可以使用。

你是说类似的东西吗?引用该方法的javadoc:

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

Class.forName(className, true, currentLoader)
其中
currentLoader
表示当前类的定义类装入器

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

Class t = Class.forName("java.lang.Thread")
调用
forName(“X”)
将初始化名为X的类

然后,调用返回的
(它必须有一个空构造函数)

创建由该
对象表示的类的新实例。该类被实例化,就像被一个带有空参数列表的
new
表达式实例化一样。如果尚未初始化该类,则初始化该类


你是说类似的东西吗?引用该方法的javadoc:

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

Class.forName(className, true, currentLoader)
其中
currentLoader
表示当前类的定义类装入器

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

Class t = Class.forName("java.lang.Thread")
调用
forName(“X”)
将初始化名为X的类

然后,调用返回的
(它必须有一个空构造函数)

创建由该
对象表示的类的新实例。该类被实例化,就像被一个带有空参数列表的
new
表达式实例化一样。如果尚未初始化该类,则初始化该类


假设该类有一个无参数构造函数,那么下面的操作应该可以完成

Class<?> clazz = Class.forName("someclass");
Object obj = clazz.newInstance();
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)); 
Constructor=clazz.getConstructor(ArgClass.class,Integer.TYPE);
Object obj=ctor.newInstance(arg,Integer.valueOf(42));

在这两种情况下都需要处理许多已检查的异常…

假设该类有一个无参数构造函数,那么下面的操作应该可以完成

Class<?> clazz = Class.forName("someclass");
Object obj = clazz.newInstance();
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)); 
Constructor=clazz.getConstructor(ArgClass.class,Integer.TYPE);
Object obj=ctor.newInstance(arg,Integer.valueOf(42));

在这两种情况下都需要处理许多已检查的异常…

谢谢,这是我需要的方向。谢谢,这是我需要的方向。我想,你指的是Integer.TYPE而不是Integer.CLASS。另外,如果使用Java 1.5或更高版本,我建议不要使用新的整数(…)(因为您使用的是varargs,情况就是这样):依赖自动装箱或使用Integer.valueOf(…)-这避免了为常用实例创建新对象。我想,您指的是Integer.TYPE而不是Integer.CLASS。另外,如果使用Java 1.5或更高版本,我建议不要使用新的整数(…)(因为您使用的是varargs,情况就是这样):要么依赖自动装箱,要么使用Integer.valueOf(…)-这样可以避免为常用实例创建新对象。