我有一個List<List<Integer>>
類型的變量e4
,我想用new ArrayList<ArrayList<Integer>>()
進行初始化。我希望這會起作用,類似於如何將它分配給List<Integer>
-類型的變量a new ArrayList<Integer>()
。相反,有一個編譯錯誤;這背後的推理是什麼,是否有必要使用諸如e3
或e5
之類的陳述?在另一個通用接口內使用通用接口
import java.util.List;
import java.util.ArrayList;
public class Example {
public static void main(String[] args) {
// e1-3 compile as expected
ArrayList<Integer> e1 = new ArrayList<Integer>();
List<Integer> e2 = new ArrayList<Integer>();
ArrayList<ArrayList<Integer>> e3 = new ArrayList<ArrayList<Integer>>();
// e4 does not compile
List<List<Integer>> e4 = new ArrayList<ArrayList<Integer>>();
// e5 does compile
List<ArrayList<Integer>> e5 = new ArrayList<ArrayList<Integer>>();
}
}
在試圖編譯上面,我得到錯誤信息:
/home/james/Example.java:12: error: incompatible types
List<List<Integer>> e4 = new ArrayList<ArrayList<Integer>>();
^
required: List<List<Integer>>
found: ArrayList<ArrayList<Integer>>
1 error
類型參數是不同的。 –
http://stackoverflow.com/questions/18666710/why-are-arrays-covariant-but-generics-are-invariant的可能重複 –