java - 如何获取参数化类实例

标签 java generics

由于引入了泛型,Class 被参数化,因此 List.class 生成 Class。这很清楚。

我无法弄清楚的是如何获取自身参数化类型的 Class 实例,即 Class>。就像在这个片段中:

public class GenTest {
    static <T> T instantiate(Class<T> clazz) throws Exception {
        return clazz.newInstance();
    }
    public static void main(String[] args) throws Exception {
        // Is there a way to avoid waring on the line below
        // without using  @SuppressWarnings("unchecked")?
        // ArrayList.class is Class<ArrayList>, but I would like to
        // pass in Class<ArrayList<String>>
        ArrayList<String> l = GenTest.instantiate(ArrayList.class);
    }
}

我经常遇到这个问题的变体,我仍然不知道,如果我只是错过了什么,或者是否真的没有更好的方法。感谢您的建议。

最佳答案

Class 类是一种类型的运行时表示。由于参数化类型在运行时经历类型删除,Class 的类对象将与 Class> 和 Class> 相同。

您不能使用 .class 符号实例化它们的原因是这是用于类文字的特殊语法。 Java Language Specification当类型被参数化时,特别禁止这种语法,这就是为什么 List.class 是不允许的。

关于java - 如何获取参数化类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71585/

相关文章:

c# - 如何在不知道 T 是什么的情况下将 T 类型的项目添加到 List<T>?

java - 在重写期间使用泛型 Map 参数将具体对象返回到泛型方法

generics - 接口(interface)之间的 Kotlin 多重继承

c# - 通用类型代码中的类型参数是否有命名约定(bracy flavoured)

java - 在java中,使用synchronized方法能不靠谱吗?

java - VideoView,为视频添加再次播放按钮

java - 我们是否应该在 JavaFX 自定义控件中使用 FXML?

java - 如何使用java从appengine数据存储中获取更新的对象集合?

java - 每个唯一不可变一个实例的设计模式是否被认为是邪恶的?

java - 有什么方法可以在 Java 中获取一个类或实例化一个双泛型类型?