我很乐意为您翻译中文。以下是需要翻译的内容:
我想知道为什么Java不能将
以下的代码为什么会出错:
编译过程中是否出现以下错误?
我想知道为什么Java不能将
ArrayList<ArrayList<T>>
隐式转换为 Iterable<Iterable<T>>
。我的问题不是如何显式地实现此操作。以下的代码为什么会出错:
import java.util.Iterator;
import java.util.ArrayList;
public class Test {
public Test() {
ArrayList<ArrayList<Test>> arr = new ArrayList();
Iterable<Iterable<Test>> casted = arr;
}
}
编译过程中是否出现以下错误?
Test.java:7: error: incompatible types: ArrayList<ArrayList<Test>> cannot be converted to Iterable<Iterable<Test>>
casted.add(new LinkedList());
,或者添加任何实现了Iterable
接口的东西,即使casted
只应该持有ArrayList<Test>
对象。 - Colonel Thirty Twoarr.add(new LinkedList());
,因为 arr 仍然是一个ArrayList<ArrayList<Test>>
。 我也不能执行casted.add(new LinkedList());
,因为 Iterable 没有实现 add。 - lovasoaList<List<Test>>
会发生什么呢?它有一个add
方法。对于Iterable
的情况,语义上没有问题(因为Iterable
是只读的),但对于一般情况,它允许你违反内部模板的类型,所以 Java 不允许你这样做。 - Colonel Thirty Two