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