是否可以通过变量为泛型类提供类型参数?:
private static final Class clazz = String.class;
ArrayList<clazz> list = new ArrayList<>();
在这个例子中我得到一个编译器错误。那么为什么这是不可能的呢?
最佳答案
正如@Jesper 所说,您正在尝试跨越编译时和运行时范围。
首先,了解 Java 泛型是一个严格的编译时特性——一旦您的 Java 源代码被编译为字节代码,您在源代码中看到的“泛型”就消失了。我建议阅读 type erasure有关该主题的更多信息。
那么编译器对泛型做了什么?它会验证转换和操作是否安全,然后自动为您将各种操作插入到您的编译代码中。这就是问题所在 - 您要求编译器根据运行时提供的参数执行操作。要点是,由于编译器无法访问运行时值,因此无法编译泛型并发生错误。
找到关于为什么 Java 泛型设计时没有具体化的精彩讨论 @ Neal Gafter's Blog .
关于Java泛型类型参数作为变量可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35483441/