java - 为什么 Java 7 的右侧没有遗漏 Diamond 运算符?

标签 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

我的想法背后的逻辑:- 正如我们已经定义的那样, map 将在 LHS 上使用 Map myMap 将字符串作为键和对象。 使用此编译器有足够的信息。那么,如果您完全错过了钻石运营商,为什么它会发出警告呢?我相信一定有原因 在它后面,但我不明白?

最佳答案

下面的代码编译运行没有错误。

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

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

通过使菱形运算符隐式化,您会破坏它。

关于java - 为什么 Java 7 的右侧没有遗漏 Diamond 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22591201/

相关文章:

java - 如何在 jOOQ 中组合条件

java - RESTEasy - @Path 需要完整路径吗?

java - 从 Node.js 应用程序调用 java 程序

swift - 是否可以将范围作为 Swift 字典中的键?

c - 使用 _Generic 实现 "safe"数学运算的合理方法?

java - 在继承层次结构中声明具有两个类型参数的方法的正确方法

java - Java 中菱形运算符 (<>) 的作用是什么?

java - 如何在java中使钻石运算符类型参数动态化?

javax.命名.AuthenticationException : [LDAP: error code 49 - Invalid Credentials]

java - Java 中菱形运算符 (<>) 的作用是什么?