gpt4 book ai didi

java - 为什么编译器允许引用未参数化的泛型类型?

转载 作者:行者123 更新时间:2023-12-01 18:47:07 27 4
gpt4 key购买 nike

为什么编译器只给出警告(“ArrayList是原始类型。对泛型类型的引用ArrayList<E>应该参数化”)并编译代码?为什么它不给出错误,因为在运行时编译器将无法将我们的数据类型转换为指定的参数类型?

最佳答案

对不带参数的泛型类型的引用称为 raw types .

编译器允许使用它们的唯一原因是向后兼容性:每一代 Java 编译器都试图尽可能向后兼容旧代码。而且自从 Java 5 中引入泛型以来,许多旧代码根本不使用它们。

来自 JLS 的引用(如上面的链接):

The use of raw types is allowed only as a concession to compatibility of legacy code. The use of raw types in code written after the introduction of generics into the Java programming language is strongly discouraged. It is possible that future versions of the Java programming language will disallow the use of raw types.

由于 Sun 不想向 ArrayList 和相关类引入平行宇宙,因此决定向集合(以及许多其他地方)添加通用类型信息,并以以下方式定义 JLS:允许旧的非通用代码仍然可以编译(但是会出现警告)。

在编写良好的情况下,永远不需要不与旧的和/或损坏的库原始类型交互的新代码。

关于java - 为什么编译器允许引用未参数化的泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17290718/

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