Java 從無類型參數Map到有類型參數Map傳值的一個問題

import java.util.HashMap;
import java.util.Map;

public class MapTest {

    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("one", 1);
        func(map);
    }

    public static void func(Map<String, String> map) {
        System.out.println(map.get("one"));
    }

}

如上代碼運行報:Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Stringjava

緣由:func方法在編譯時,println方法默認用的是:函數

public void println(String x) {
    synchronized (this) {
        print(x);
        newLine();
    }
}

println的入參是String類型,這是根據func方法的入參Map<String, String> map推斷而來的。this

main函數中的map沒有提供類型參數,默認是Map<Object,Object>,雖然實際是Map<String,Integer>,但傳給func是不會報錯的。spa

println雖然有無數個重載版本,也有int的入參,但這裏卻被編譯器限死了只能用String的入參,致使報ClassCastException。code

相關文章
相關標籤/搜索