Tag: diamond operator

Java 7钻石运营商:为什么难以实施?

我观看了Oracle OTN虚拟事件:Java SE和JavaFX 2。0(2012年2月28日),同时讨论了新的菱形运算符( Map<String, List> myMap = new HashMap(); thing)提到它并不像人们想象的那样简单,因为它不是一个简单的令牌替代品。 我的问题是为什么? 为什么不能简单地从变量声明中取出字符串并将其放入菱形运算符中?

为什么菱形运算符在Java 7中的addAll()调用中不起作用?

给出了generics教程中的这个例子。 List list = new ArrayList(); list.add(“A”); // The following statement should fail since addAll expects // Collection list.addAll(new ArrayList()); 为什么最后一行不能编译,它似乎应该编译。 第一行使用非常相似的构造并且编译没有问题。 请详细解释。

为什么在Java 7中右手边没有漏掉Diamond运算符?

Java 7改进了钻石操作员 在Java 6中 Map myMap = new HashMap(); 在Java 7中 Map myMap = new HashMap(); 在Java 7中,类型已从右侧的钻石操作员(RHS)中删除。 我的问题为什么不从RHS删除完整的钻石操作。 我知道它会抛出警告,但java 7也可以删除警告。 – Type safety: The expression of type HashMap needs unchecked conversion to conform to Map – HashMap is a raw type. References to generic type HashMap should be parameterized 我认为背后的逻辑: – 正如我们已经定义的那样,地图将在LHS上使用Map myMap作为键和对象。 有了这个编译器有足够的信息。 […]

Maven项目错误:-source 1.5中不支持Diamond / multicatch运算符

由于以下两个错误,我无法构建我的maven java Web应用程序: diamond operator is not supported in -source 1.5 (use -source 7 or higher to enable diamond operator) multi-catch statement is not supported in -source 1.5 (use -source 7 or higher to enable multi-catch statement) 我很困惑,因为我使用java 1.8.0作为我的项目,我从来没有实际使用过1.5 什么可能导致这个问题,我该如何解决? 我在pom.xml中添加了以下行后尝试构建它,但没有成功: 1.8 1.8

为什么菱形运算符不适用于Java 7中的java.util.Collections方法?

在Java 1.7.0_55中,如果我写这个字段声明,我得到一个编译错误(“不兼容的类型”): private final Map myMap = Collections.synchronizedMap(new HashMap()); 如果我将其改为: private final Map myMap = Collections.synchronizedMap(new HashMap()); 它汇编很好。 (我在这里使用synchronizedMap作为示例,但其他集合方法也是如此,不可修改*,同步*等) 但是为什么钻石操作员不像我期望的那样工作呢? 由于Collections.synchronizedMap()声明为: public static Map synchronizedMap(Map m) { 在我看来,构造函数调用的类型参数必须与字段声明的类型参数相同,并且编译器应该能够基于此推断构造的类类型参数。 我试着在JLS中寻找一个条款,说这种语法是不可接受的,但我找不到一个。 有人能指点我吗?

为什么在Java 7中使用菱形运算符进行类型推理?

List list = new ArrayList(); 将导致编译器警告。 但是,以下示例在没有任何警告的情况下编译: List list = new ArrayList(); 我很好奇为什么需要引入钻石操作员。 如果没有类型参数,为什么不在构造函数上进行类型推断(因为它已经针对java中的静态方法已经完成并且被像google guava这样的集合库利用) 编辑 :使用millimoose答案作为起点我查看了实际上是什么类型的擦除,它不只是删除所有类型信息。 编译器实际上做了一些(从官方文档复制): 如果类型参数是无界的,则将generics类型中的所有类型参数替换为其边界或对象。 因此,生成的字节码仅包含普通的类,接口和方法。 如有必要,插入类型铸件以保持类型安全。 生成桥接方法以保留扩展generics类型中的多态性。

在构思ide中获取菱形运算符的编译错误

我在尝试编译ide ide中的一些简单源代码时遇到此错误。 java: diamond operator is not supported in -source 1.6 (use -source 7 or higher to enable diamond operator) 来自oracle的jdk是1.7.40 但这个地方添加这个“-source 7”选项在哪里? 我尝试添加ide设置,但没有效果。