Java 7 diamond运算符:为什么难以实现?[英] Java 7 diamond operator: why was it difficult to implement?

问题描述

我观看了 Oracle OTN 虚拟活动:Java SE 和 JavaFX 2.0(2012 年 2 月 28 日),在谈到新的菱形运算符(那个 Map<String, List<String>> myMap = new HashMap<>(); 东西)时,演讲者提到它的实现并不像人们想象的那么简单,因为它不是简单的令牌替换.

我的问题是为什么?为什么不能将其实现为简单地从变量声明中获取字符串并将其放入菱形运算符中?

推荐答案

我也没实现,只能猜测.

但是通常这些事情比看起来更复杂的原因是第一次检查只查看最常见(或最广为人知的)用例.在这种情况下,它就是您提到的那个.理论上应该很容易准确指定,并且应该很容易在编译器中实现.

但是,菱形运算符(顺便说一下,它在技术上不是运算符)也可以以不同的方式使用:

someMethodWithGenericArguments(new HashMap<>());
new SomeGenericClass(new HashMap<>());
T foo = new SomethingRelatedToT<>(); // where T is a generic type parameter

在这些情况下,简单的标记替换显然不再有效,您需要涉及真实类型分析的实际类型推断(即,它与简单的标记替换处于完全不同的抽象级别).

本文地址:https://www.itbaoku.cn/post/978722.html