簡體   English   中英

調用泛型方法時如何在不傳遞類型參數的情況下使用泛型方法?

[英]How to use Generic methods without passing Type Parameters when calling the generic method?

我可以在腦海中理解和想象它是如何工作的:

public static void main(String[] args) {
    String passString = foo("hello");
    Integer passInteger = foo(5);
}
public static <K> K foo(K k) {
    return k;
}

很好,編譯器知道K在第一種情況下是String,在第二種情況下是Integer,因為在調用foo時我們將對象作為參數傳遞。

但是我不明白這是如何工作的:

public static void main(String[] args) {
    HashMap<Integer, String> myMap
            = newInstance();
    myMap.put(1, "Hello");
}
public static <K,V> HashMap<K,V> newInstance() {
    return new HashMap<K, V>();
}

編譯器實際上檢查我將myMap分配給什么嗎? 這里有某種隱藏的演員嗎? 也許我缺少明顯的東西,但是在編譯時如何將K和V解析為Integer和String?

編譯器實際上檢查我將myMap分配給什么嗎?

是的,這就是它的作用。 這稱為目標類型推斷或“目標類型”。

值得注意的是,Java 8中改進了javac進行此類推斷的能力-現在,您需要提供顯式類型見證人的地方越來越少(例如Collections.<String>emptySet() )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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