2009-11-04 70 views
2

可能重複:
What are the reasons why Map.get(Object key) is not (fully) generic爲什麼Java的Hashtable的get方法將Object作爲參數?

從JDK文檔,put方法:

public V put(K key, V value) 

但是,get方法:

public V get(Object key) 

任何想法?

注意:在我繼承的某些代碼中,存在一個錯誤,其中有人使用String作爲帶有Integer鍵的Hashtable的get方法的參數。

+0

我感覺到你的痛苦,我以前一直在這一點。失去的幾個小時追蹤它。 – 2009-11-04 16:02:37

回答

1

這允許任何Object相當於給定的鍵來獲得值。

例如,您可能有兩個類覆蓋equals方法,以便在相互比較的情況下返回true。由於這些對象是等價的,它們都應該能夠獲得該值。

這與equals方法有Object參數的原因相同。

+0

但爲什麼不把A K作爲參數?這樣,至少編譯器可以告訴我我犯了一個錯誤。 – abendigo 2009-11-04 16:01:51

+0

因爲如果它只需要K類型的對象,那麼即使該對象相當於K類型的對象,您也無法使用不同類型的對象獲取該值。 – 2009-11-04 16:03:04

+0

也不會這樣推理申請放? – alphazero 2009-11-04 16:04:13

0

get方法將採取任何Object作爲關鍵,因爲任何對象都可以存儲在HashMap(因爲所有對象都是Object類型的子類)。

它只是檢查該Object的.equals方法以返回HashMap中的匹配項。

+0

但爲什麼不把K作爲參數呢? – abendigo 2009-11-04 16:00:41

+0

這並不能解釋爲什麼他們不會使用創建集合時提供的泛型類型。 – 2009-11-04 16:01:17

相關問題