导语:今天在做算法题的时候碰到一个问题
error: incompatible types: ArrayList<ArrayList<Integer>> cannot be converted to List<List<Integer>>
return res;
查找相关资料发现是泛型的一个坑,先看一些小例子(众所周知,只要类型兼容,就可以将一种类型的对象分配给另一种类型的对象。)
//例如,你可以指定一个Integer到一个Object,因为Object是Integer的超类型
Object someObject = new Object();
Integer someInteger = new Integer(10);
someObject = someInteger; // OK
//Integer和Double都是Number的一种
public void someMethod(Number n) { /* ... */ }
someMethod(new Integer(10)); // OK
someMethod(new Double(10.1)); // OK
//泛型也是这样
Box<Number> box = new Box<Number>();
box.add(new Integer(10)); // OK
box.add(new Double(10.1)); // OK
接着看另外一种情况
public void boxTest(Box<Number> n);
boxTest(Box<Integer>) //注意是不可以的
boxTest(Box<Double>) //注意是不可以的
那为啥这种就不可以呢?(如下图:Box<Integer>和Box<Number>是并列关系,而非继承关系,所以不可以)
接着回归我们的问题,当我们试图用ArrayList<ArrayList<Integer>> 去new一个List<List<Integer>>时,就会报这个错。
List<List<Integer>> = new ArrayList<ArrayList<Integer>>();
原因也是上面的问题ArrayList<Integer>并不继承与List<Integer>