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.String

原因:func方法在編譯時,println方法默認用的是:

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

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

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM