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