java - 泛型类型作为方法参数

标签 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?确实回答了我问题的第一部分。

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

最佳答案

没有任何机制可以仅通过泛型来实现这一点。您必须使用反射来实现这一点。

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/

相关文章:

java - 将txt文件读入数组,然后找到工资的最小值、最大值和平均值

dictionary - 从 Swift 字典中一次提取多个键的值

Int 和 Long 的 Scala 中值函数

java - 如何将通用对象转换为原始数组?

java - 绑定(bind)不匹配 : The type MyClass1 is not a valid substitute for the bounded parameter <T extends Comparator<T>> of the type Person<T>

java - 泛型 - 正确处理原始类型警告 :

java - 根据应用程序在 jar 中加载 spring bean

java - Hibernate + HSQLDB 中的 Longblob 替代方案

java - 动态添加内容时将 Jscrollpanes 宽度限制为父级宽度

java - 创建无符号字节供串行端口使用