我正在接收大量的擴展我的對象的對象的數組列表。我想將它們插入散列表中以加快參考。我決定創建一種避免重複代碼的方法,因爲它經常發生,並且只是爲了好玩,我希望變得更加花哨,並使用泛型。我知道有幾種方法可以做到這一點,但沒有一個看起來很乾淨或漂亮。我想知道如果我錯過了一個更簡單的解決方案。所以,我想要做這樣的事情...使用泛型向hashmap添加集合
private void addToMap(Collections<? extends myObject> collection, Map<String, ? extends myObject> map){
for(MyObject myObject: collection){
map.put(myObject.getName(), myObject);
}
}
方法的合同將要求集合作爲地圖將會提供存儲相同的類。我很好,如果方法拋出一個異常是有人打破該合同,並嘗試傳入兩個存儲myObject的不同實現,然後存儲地圖的集合。
上面的代碼失敗了,因爲我不能將'myObject'放入期望「?extends MyObject」來鼓勵類型安全的集合中。我很好,只是投了它,但他們只知道如何投射它,涉及到幾個難看的反射步驟,似乎令人費解。我也可以創建某種內部類來讓我可以使用更強大的泛型(強制收集和映射以存儲相同類型),但它也感覺過度殺傷。
那麼,是否有一種簡單或漂亮的方式以最直觀的方式創建此方法?我知道我可以完全拋棄泛型,只是拋出一切東西,我只是想弄清楚一個更優雅的方法。
應該?擴展myObject'而不是'?擴展MyObject'? – 2013-03-21 01:06:32
@RichardJPLeGuen:不是,它應該是'?超級MyObject「。 – 2013-03-21 02:11:54