下面的代碼編譯沒有錯誤......這一次我更希望它失敗:/Java泛型非問題在編譯時
Map <Character, Double> m = new HashMap <Character, Double>();
m.get(new String());
由於編譯器知道在這個地圖中使用的主要是字符類型,使用字符串鍵應該被標記爲不正確。
我缺少什麼?
下面的代碼編譯沒有錯誤......這一次我更希望它失敗:/Java泛型非問題在編譯時
Map <Character, Double> m = new HashMap <Character, Double>();
m.get(new String());
由於編譯器知道在這個地圖中使用的主要是字符類型,使用字符串鍵應該被標記爲不正確。
我缺少什麼?
你不會錯過任何東西。所有Map#get()
調用只需要Object
。
根據實施,你可能會看到一個(運行時)ClassCastException
當你傳遞一個String
到Map<Character, Double>#get()
。
如果您嘗試運行此代碼,則缺少(可選)運行時異常(ClassCastException
)。
該方法得到沒有參數化與泛型參數只有結果是。
你也可以做
m.get(1L); //m.get(Object o);
的參數化方法把
m.put(new String(), 0.0); //Fail
//The method put(Character, Double) in the type Map<Character,Double> is not applicable for the arguments (String, double)
m.put(new Character('c'), 0.0); //Ok
Map.get()接受一個對象作爲參數:java.util.Map#get
get
檢索對象的參數是.equals()
。一個對象可能是.equals()
到另一個類的對象。
是的,這是正確的。字符串是一個對象:)我的IDE確實會發出警告 – 2010-11-03 14:08:21
我認爲這樣做的目的是保存遺留代碼。糾正我,如果我錯了。 – Jeremy 2010-11-03 14:09:52
完全正確(+1),儘管它是可怕的... – 2010-11-03 14:12:01