我收到了大量扩展我的对象的对象数组列表。我想将它们插入到 HashMap 中以便更快地引用。我决定创建一种方法来避免重复代码,因为这种情况经常发生,并且只是为了好玩,我想变得更加花哨并使用泛型。我知道有几种方法可以做到这一点,但没有一种看起来很干净或漂亮;我想知道我是否缺少一个更简单的解决方案。所以我想做这样的事情......
private void addToMap(Collections<? extends myObject> collection, Map<String, ? extends myObject> map){
for(MyObject myObject: collection){
map.put(myObject.getName(), myObject);
}
}
该方法的契约要求提供的集合存储与映射相同的类。如果该方法抛出异常,如果有人违反该契约(Contract)并尝试传入两个存储 myObject 的不同实现的集合,然后存储 map ,我很好。
上面的代码失败了,因为我无法将“myObject”放入期望“?extends MyObject”的集合中以鼓励类型安全。我只是转换它就可以了,但他们是我知道如何转换它的唯一方法,涉及到一些丑陋的反射(reflection)步骤,而且看起来很复杂。我还可以创建某种内部类来提供更强大的泛型(强制集合和映射存储相同的类型),但这也感觉有点矫枉过正。
那么,是否有一种简单或漂亮的方式来以对读者最直观的方式创建此方法?我知道我可以完全抛弃泛型,只从对象中转换所有内容,我只是想找出一种更优雅的方法。
最佳答案
听起来您想要以下内容:
private <T extends MyObject> void addToMap(
Collection<T> collection,
Map<String, ? super T> map
) {
for (T myObject : collection) {
map.put(myObject.getName(), myObject);
}
}
更多信息:
关于java - 使用泛型将集合添加到 HashMap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15537665/