Map <string,list <?=“”extends =“”abstracttype =“”>&gt;

时间:2016-02-25 14:49:41

标签: java list generics dictionary

我正在寻找堆栈溢出,但我不知道这是否可能,但这是我的问题:

我有两种类型ABAbstractType延伸, 那么我想要一个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。

我希望有人会有个主意。

1 个答案:

答案 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;
        }

希望这有帮助!