我正在接收大量的扩展我的对象的对象的数组列表。我想将它们插入散列表中以加快参考。我决定创建一种避免重复代码的方法,因为它经常发生,并且只是为了好玩,我希望变得更加花哨,并使用泛型。我知道有几种方法可以做到这一点,但没有一个看起来很干净或漂亮。我想知道如果我错过了一个更简单的解决方案。所以,我想要做这样的事情...使用泛型向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