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

时间:2014-03-23 12:56:02

标签: java generics diamond-operator

Java 7改进了钻石运算符

在Java 6中

Map<String, String> myMap = new HashMap<String, String>();

在Java 7中

  Map<String, String> myMap = new HashMap<>();

在Java 7中,类型已从右侧的钻石操作员(RHS)中删除。我的问题为什么不从RHS删除完整的钻石操作。 我知道它会抛出警告,但java 7也可以删除警告。

                    -

 Type safety: The expression of type HashMap needs unchecked conversion to conform to 
 Map<String,String>
- HashMap is a raw type. References to generic type HashMap<K,V> should be parameterized

我认为背后的逻辑: - 正如我们已经定义的那样,地图将在LHS上使用Map myMap作为键和对象。 有了这个编译器有足够的信息。如果您完全错过钻石操作员,为什么会抛出警告呢?我肯定必须有理由 在它背后,但我没有得到它?

1 个答案:

答案 0 :(得分:1)

以下代码编译并运行时没有错误。

SoftReference<String> ref = new SoftReference(new Integer(1));
Object o = ref.get();
System.out.println(o); // prints "1"

创建SoftReference的原始实例。 &#34;原料&#34;意味着没有泛型类型检查,这是允许将泛型与预泛化代码混合所必需的。

通过隐藏钻石算子,你会破坏它。