2015-09-20 62 views
0

我在HashMap存儲(不是對象)...類(而不是對象)中的一個HashMap

但我不明白,如果它會正常工作......因爲我不能覆蓋equals()hashCode(),對嗎?我的意思是,HashMap必須比較2個類別,而不是2個對象...

那麼,它會工作,只是將類放入HashMap

還是會造成問題?

protected HashMap<Class<? extends MyBaseClass>, int> someTable = new HashMap<>(); 
+2

發佈您的代碼。你的描述很混亂。 –

+0

我不確定你的意思。你能否進一步闡述? –

+0

你有什麼試過,結果是什麼?正如你在學校所做的那樣,請展示你的工作。 :)這是在SO上獲得問題的過程中的一部分。這對你很有幫助,因爲它會迫使你調查自己的問題並思考問題。這也向讀者證明你做了功課,並做出了合理的嘗試來回答你自己的問題。第三,它可以幫助讀者找到和診斷問題,爲您提供更好的答案,減少浪費時間。 – JeffC

回答

1

它會工作;您可以安全地使用Class對象作爲HashMap中的鍵。 getClass()方法針對特定類的不同實例返回的值將引用相同的Class實例。 和hashCode方法Class直接從Object==等式和本機散列碼實現)繼承。

有一點要注意的是,根據Map的生命週期,有一個chance for a memory leak,因爲類包含對其類加載器的引用。通常情況下,你不需要擔心這個問題。

+0

它會更好地將類的名稱存儲爲字符串,例如' 「com.example.MyClass」'?你可以用'Class.forName'獲得Class對象 – dave

+1

@dave - 這取決於。如果您有多個類加載器的複雜場景,類名稱可能不是唯一的。 'Class'對象在這種情況下也可以正常工作。 –

0

你說你不明白。因爲你的問題是錯誤的您存儲

I am storing Classes (not objects) in a HashMap... 

類是絕對對象。它們是java.lang.Class的實例

相關問題