Java 列表的不兼容类型列表和ArrayList的ArrayList
下面的一行给了我一个错误:Java 列表的不兼容类型列表和ArrayList的ArrayList,java,list,arraylist,incomplete-type,Java,List,Arraylist,Incomplete Type,下面的一行给了我一个错误: Incompatible Types. List<List<Integer>> output = new ArrayList<ArrayList<Integer>>(); 不兼容的类型。 列表输出=新的ArrayList(); 原因是什么 编辑 我明白如果我将第二个ArrayList更改为List,它不会给我错误信息。不过我想知道出错的原因。谢谢如果您有一个列表,那么您就可以向其中添加一个链接列表。但是不能对Arr
Incompatible Types.
List<List<Integer>> output = new ArrayList<ArrayList<Integer>>();
不兼容的类型。
列表输出=新的ArrayList();
原因是什么
编辑
我明白如果我将第二个ArrayList更改为List,它不会给我错误信息。不过我想知道出错的原因。谢谢如果您有一个列表
,那么您就可以向其中添加一个链接列表
。但是不能对ArrayList
执行此操作,因此后者不可能是来自的列表的类型
这是一个常见的误解,当涉及到与编程
泛型,但这是一个需要学习的重要概念
Box
不是Box的子类型,即使Integer是Number的子类型
这是在
通常,如果Foo是Bar的子类型(子类或子接口),并且
G是某种泛型类型声明,它不是G
的情况
G
的子类型。这可能是你需要做的最难的事情
了解泛型,因为它违背了我们根深蒂固的观念
直觉
同样的事情发生在这里,它是Bar=List
和Foo=ArrayList
,因为ArrayList
不是List
的子类型,原因是泛型不是
考虑更简单的情况:
List<Integer> integers = new ArrayList<Integer>();
List<Number> numbers = integers; // cannot do this
numbers.add(new Float(1337.44));
List integers=new ArrayList();
列表编号=整数;//不能这样做
增加(新浮动(1337.44));
现在列表中有一个浮动,这肯定是不好的
你的情况也一样
List<ArrayList<Integer>> al = new ArrayList<ArrayList<Integer>>();
List<List<Integer>> ll = al; // cannot do this
ll.add(new LinkedList<Integer>())
List al=new ArrayList();
列表ll=al;//不能这样做
ll.add(新建LinkedList())
现在您有了一个列表ll
,它保存着LinkedList
,但是al
被声明为ArrayList
s的列表。正确的书写应该是:
List ret=new ArrayList()代码>
因为通过这种方式,您不仅可以将ArrayList
添加到ret
中,还可以将LinkedList
添加到ret更少的文本更多的修复:
List List=new ArrayList();
或
List List=new ArrayList();
ArrayList输出=新建ArrayList()
是不是没有变异的有效语言可以让多态性带来更多的乐趣。这并不能回答这个问题。问题是“原因是什么?”。你所做的只是用不同的类重申问题的前提,问题是“原因是什么”。