我想创建一个方法,它可以接受一个对象类型作为参数,然后我可以使用它来实例化另一个对象。
例如,将类型String
传递给方法,并在方法体内执行
List<String> l = new ArrayList<String>();
String s = new String("abc");
我该怎么做?
编辑:
How to have Java method return generic list of any type?确实回答了我问题的第一部分。
作为后续,我可以在方法体中创建传入类型的实例,如上面代码片段中的第二行吗?
答案 0 :(得分:1)
没有任何机制可以通过泛型获得它。你必须使用反射来实现它。
public <T> T instantiator(Class<T> c){
if (c != null){
try {
return (T) c.getConstructor().newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
但是,如果不仔细使用,反射可能会失败。如果类有一个没有参数的构造函数,我刚写的这个方法工作正常。例如,instantiator(String.class);
和instantiator(Exception.class);
可以正常工作,因为它有一个空的构造函数,但instantiator(Integer.class)
将无法运行。