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