jab*_*bal 16 java diamond-operator java-7
我观看了Oracle OTN虚拟事件:Java SE和JavaFX 2.0(2012年2月28日),在谈到新的钻石操作员(那Map<String, List<String>> myMap = new HashMap<>();件事)时,发言者提到它并不像人们想象的那样简单,因为它不是简单的令牌替换.
我的问题是为什么?为什么不能简单地从变量声明中取出字符串并将其放入菱形运算符中?
Joa*_*uer 14
我也没有实现它,所以我只能猜测.
但通常这些事情比它们看起来更复杂的原因是第一次检查只关注最常见(或最公开)的用例.在这种情况下,它是你提到的那个.从理论上讲,它应该很容易准确指定,并且应该很容易在编译器中实现.
然而,钻石操作员(顺便说一下,在技术上不是操作员)也可以以不同的方式使用:
someMethodWithGenericArguments(new HashMap<>());
new SomeGenericClass(new HashMap<>());
T foo = new SomethingRelatedToT<>(); // where T is a generic type parameter
Run Code Online (Sandbox Code Playgroud)
在这些情况下,简单的令牌替换显然不再有效,您需要涉及实际类型分析的实际类型推断(即,它在完全不同的抽象级别上作为简单的令牌替换将是).