我观看了Oracle OTN虚拟事件:Java SE和JavaFX 2.0(2012年2月28日),在讲解新的钻石操作符(Map<String, List<String>> myMap = new HashMap<>();
)时,演讲者提到它并没有想象中那么简单实现,因为它不是一个简单的令牌替换。
我的问题是为什么?为什么不能简单地将变量声明中的字符串放入钻石操作符中呢?
我观看了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
someMethodWithGenericArguments()
被重载为 Map<String,String>
和 Map<Integer,Integer>
,那么钻石操作符对我来说似乎完全不明确。 - jabalMap <String,String>
和 Map <Integer,Integer>
具有相同的擦除(Map
),因此您不能将这两个重载放在单个方法中。 - Joachim SauerJava没有像许多其他语言那样基于使用隐含类型的功能。也就是说,Java不会根据使用方式隐含需要的类型。
例如:
Type a = b;
a
和 b
的类型是独立的,不会根据 a
的类型对 b
做出任何假设。MethodHandles 正在显示支持此功能。返回类型可以基于上下文进行使用,但这是一个运行时特性。总之,我的假设是:在 Java 中实现这个功能很难,因为该语言不支持类似的功能。如果该语言一直使用这样的功能,那么应该定义如何工作的规范,并由编译器中的工具支持。请注意保留 HTML 标签。