为什么以下java代码导致编译错误

时间:2012-02-05 19:36:07

标签: java generics type-systems

我目前正在努力使我的代码包含更多泛型。我遇到了一个编译错误,看起来很复杂但我能够在以下代码中减少到相同的错误:

List<List<?>> a = new ArrayList<List<Integer>>();

为什么会这样?我该怎么做才能解决它?

2 个答案:

答案 0 :(得分:4)

具有不同类型参数的泛型类的实例不相关,即使StringObject的子类型,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>());

虽然这是相当愚蠢的,因为你刚刚定义了一个可以容纳任何内容的列表,并且除非你确切知道每个外部列表中的内容,否则就会出现这种情况。由于类型擦除,以后无法将其判断。