gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:06:48 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com