我正在寻找堆栈溢出,但我不知道这是否可能,但这是我的问题:
我有两种类型A
和B
从AbstractType
延伸,
那么我想要一个Map
同时包含两种类型的对象:
Map<String,List<? extends AbstractType>> map = new HashMap();
map.put("toto",new Arraylist<A>);
map.put("sacha",new Arraylist<B>);
List<A> a = (List<A>)map.get("toto");
我有一个完全可以理解的安全警告,但这是我发现这项工作的最佳方式。
我找到的唯一安全选项是有两个不同的列表,但我宁愿选择一个地图来避免多个if case。
我希望有人会有个主意。
答案 0 :(得分:0)
您还可以使用instanceof
始终确保您不会遇到麻烦。以下是一个示例,您可以根据自己的要求进行修改:
Map<String,List<? extends AbstractType>> map = new HashMap<>();
map.put("toto",new ArrayList<A>());
map.put("sacha",new ArrayList<B>());
List<? extends AbstractType> objList = (List<? extends AbstractType>) map.get("toto");
List<A> a = null;
List<B> b = null;
if(objList.size() > 0 && objList.get(0) instanceof A){
a = (List<A>) objList;
}else if (objList.size() > 0 && objList.get(0) instanceof B){
b = (List<B>) objList;
}
希望这有帮助!