[英]Different behaviour for generic method return value to method and to assignment
我面對代碼,編譯結果讓我感到驚訝。
public class Test3{
public static<K,V> Map<K,V> map(){return new HashMap<K,V>();}
}
class A{
static void f(Map<String,Integer> bcMap){}
public static void main(String[] args){
f(Test3.map()) //not valid
Map<String,Integer> m = Test3.map();//valid
}
}
總是我認為如果我將值傳遞給方法,則意味着方法參數分配給傳遞的值。
批准是否錯誤?
更正:
您對Test3.map()
使用不提供類型參數,編譯器無法推斷類型參數。 無法推斷類型參數時,JLS會說以下內容
然后推斷出尚未推斷的任何剩余類型變量
T
具有類型Object
。
所以方法調用看起來像
Map<Object, Object> object = Test3.map();
f(object); //not valid
這可以通過編譯器的錯誤消息來確認:
不兼容的類型:
java.util.Map<java.lang.Object,java.lang.Object>
無法轉換為java.util.Map<java.lang.String,java.lang.Integer>
泛型類型參數默認為Object
。
您可以通過指定類型參數來修復它
f(Test3.<String, Integer>map()); // valid
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.