Java泛型类型参数作为变量可能吗?

标签 java generics

是否可以通过变量为泛型类提供类型参数?:

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/

相关文章:

java - 为webview添加进度条

java - 从 Tomcat 迁移到 WAS

Java 功能集合和未检查的警告

java - 访问保存到 Android 设备内部存储的数据

java - 用 Java 8 Optional 替换重复的 get 语句

generics - 无法将 dynamic_cast 与泛型一起使用

java - 作为字符串的函数名称

swift - 如何使用 Swift 泛型处理成功和错误 API 响应?

generics - typescript 中的 "Generic type ' Feature<T >' requires 1 type argument(s)"是什么意思?

java - Android Studio-数据库