gpt4 book ai didi

java - 为什么菱形运算符用于 Java 7 中的类型推断?

转载 作者:搜寻专家 更新时间:2023-10-30 21:02:03 25 4
gpt4 key购买 nike

List<String> list = new ArrayList();将导致编译器警告。

但是下面的例子编译时没有任何警告:List<String> list = new ArrayList<>();

我很好奇为什么需要引入钻石运算符。如果类型参数不存在,为什么不对构造函数进行类型推断(因为它已经在 java 中为静态方法完成并被 google guava 等集合库利用)

EDIT:使用 millimoose 答案作为起点,我查看了实际上是什么类型删除,它不仅仅是删除所有类型信息。编译器实际上做了更多(从 official doc 复制):

  • 如果类型参数是无界的,则将泛型类型中的所有类型参数替换为它们的边界或 Object。因此,生成的字节码仅包含普通类、接口(interface)和方法。
  • 必要时插入类型转换以保持类型安全。
  • 生成桥接方法以在扩展泛型类型中保留多态性。

最佳答案

明确的答案必须来自设计该功能的人,但我假设这是为了将其与使用原始类型区分开来,这使得编译器为了兼容性而做一些完全不同的事情。其中包含原始类型的表达式的处理方式巧妙地与涉及泛型的表达式不同,在这个 SO 问题中可以找到一个示例:Generic screws up non-related collection

关于java - 为什么菱形运算符用于 Java 7 中的类型推断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14909875/

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