我想创建一个可以接受对象类型作为参数的方法,然后我可以用它来实例化另一个对象。
例如,传入类型String
到方法,并在方法体内,执行
List<String> l = new ArrayList<String>();
String s = new String("abc");
我该如何去做呢?
编辑:
How to have Java method return generic list of any type?确实回答了我问题的第一部分。
作为后续操作,我可以在方法体内创建传入类型的实例吗?如上面代码片段中的第二行所示?
最佳答案
没有任何机制可以仅通过泛型来实现这一点。您必须使用反射来实现这一点。
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) )
不会运行。
关于java - 泛型类型作为方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43253201/