public class ExplicitTypeSpecification {
static void f(Map<Integer, String> map){}
public static void main(String[] args){
New c = new New();
f(c.map());
}
}
class New <K, V>{
Map<K, V> map(){
return new HashMap<K, V>();
}
}
此代码编译没有错误。
然后,我们对 New 类进行一些更改:
class New {
<K, V>Map<K, V> map(){
return new HashMap<K, V>();
}
}
我们只参数化了方法map(),而不是整个类。但在这种情况下,行发生编译错误f(c.map());:
java: f(java.util.Map<java.lang.Integer,java.lang.String>) in
Generics.ExplicitTypeSpecification.ExplicitTypeSpecification cannot be applied to
(java.util.Map<java.lang.Object,java.lang.Object>)*
我们可以指出显式类型f(c.<Integer, String>map());,但我对为什么会出现编译错误感兴趣?.
在这两种情况下,方法map()都会返回Map<Object, Object>对象,但在第一种情况下,我们只会收到未检查分配的警告。
问题:为什么在第二种情况下我们有更严格的类型检查?
new HashMap()和 new之间有什么区别HashMap<Object, Object>()?这个问题的答案解决了它。