通用类型作为方法参数

时间:2017-04-06 10:58:37

标签: java generics

我想创建一个方法,它可以接受一个对象类型作为参数,然后我可以使用它来实例化另一个对象。

例如,将类型String传递给方法,并在方法体内执行

List<String> l = new ArrayList<String>();
String s = new String("abc");

我该怎么做?

编辑:

How to have Java method return generic list of any type?确实回答了我问题的第一部分。

作为后续,我可以在方法体中创建传入类型的实例,如上面代码片段中的第二行吗?

1 个答案:

答案 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)将无法运行。