我目前正在努力使我的代码包含更多泛型。我遇到了一个编译错误,看起来很复杂但我能够在以下代码中减少到相同的错误:
List<List<?>> a = new ArrayList<List<Integer>>();
为什么会这样?我该怎么做才能解决它?
答案 0 :(得分:4)
具有不同类型参数的泛型类的实例不相关,即使String
是Object
的子类型,List<String>
不是List<Object>
的子类型,即使List<Integer>
是List<?>
的子类型,List<List<Integer>>
也不是List<List<?>>
的子类型。
也许您正在寻找
List<? extends List<?>> a = new ArrayList<List<Integer>>();
答案 1 :(得分:2)
双方必须匹配内部List
:
List<List<?>> foo = new ArrayList<List<?>>();
foo.add(new ArrayList<Integer>());
虽然这是相当愚蠢的,因为你刚刚定义了一个可以容纳任何内容的列表,并且除非你确切知道每个外部列表中的内容,否则就会出现这种情况。由于类型擦除,以后无法将其判断。