我有一个带有类名的字符串,是否有一种方法(用Java编写)在创建该类的新实例时使用该字符串,以执行以下操作:
object obj = new dataInString 。
所以dataInString是从字符串中解析出来的。
答案 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”)应该是寻找有关反射的更多信息的良好起点。