【问题标题】:Why Diamond operator was not missed from Right hand side in Java 7?为什么在 Java 7 的右手边没有错过 Diamond 运算符?
【发布时间】:2014-03-23 12:56:01
【问题描述】:

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。 有了这个编译器有足够的信息。那么,如果您完全错过了钻石运算符,为什么它会发出警告呢?我相信一定有原因 在它后面,但我没有得到它?

【问题讨论】:

  • 这是类型推断和原始类型的区别。一如既往,答案是“向后兼容”。

标签: java generics diamond-operator


【解决方案1】:

以下代码编译运行无错误。

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

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

通过使菱形运算符隐含,你会破坏它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    相关资源
    最近更新 更多