簡體   English   中英

泛型方法的不同行為將值返回給方法和賦值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM