我在HashMap
存儲類(不是對象)...類(而不是對象)中的一個HashMap
但我不明白,如果它會正常工作......因爲我不能覆蓋equals()
或hashCode()
,對嗎?我的意思是,HashMap
必須比較2個類別,而不是2個對象...
那麼,它會工作,只是將類放入HashMap
?
還是會造成問題?
protected HashMap<Class<? extends MyBaseClass>, int> someTable = new HashMap<>();
我在HashMap
存儲類(不是對象)...類(而不是對象)中的一個HashMap
但我不明白,如果它會正常工作......因爲我不能覆蓋equals()
或hashCode()
,對嗎?我的意思是,HashMap
必須比較2個類別,而不是2個對象...
那麼,它會工作,只是將類放入HashMap
?
還是會造成問題?
protected HashMap<Class<? extends MyBaseClass>, int> someTable = new HashMap<>();
它會工作;您可以安全地使用Class
對象作爲HashMap
中的鍵。 getClass()
方法針對特定類的不同實例返回的值將引用相同的Class
實例。 和hashCode
方法Class
直接從Object
(==
等式和本機散列碼實現)繼承。
有一點要注意的是,根據Map的生命週期,有一個chance for a memory leak,因爲類包含對其類加載器的引用。通常情況下,你不需要擔心這個問題。
它會更好地將類的名稱存儲爲字符串,例如' 「com.example.MyClass」'?你可以用'Class.forName'獲得Class對象 – dave
@dave - 這取決於。如果您有多個類加載器的複雜場景,類名稱可能不是唯一的。 'Class'對象在這種情況下也可以正常工作。 –
你說你不明白。因爲你的問題是錯誤的您存儲
I am storing Classes (not objects) in a HashMap...
類是絕對對象。它們是java.lang.Class的實例類
發佈您的代碼。你的描述很混亂。 –
我不確定你的意思。你能否進一步闡述? –
你有什麼試過,結果是什麼?正如你在學校所做的那樣,請展示你的工作。 :)這是在SO上獲得問題的過程中的一部分。這對你很有幫助,因爲它會迫使你調查自己的問題並思考問題。這也向讀者證明你做了功課,並做出了合理的嘗試來回答你自己的問題。第三,它可以幫助讀者找到和診斷問題,爲您提供更好的答案,減少浪費時間。 – JeffC