刚遇到了这个问题:
List<DataNode> a1 = new ArrayList<DataNode>();
List<Tree> b1 = a1; // compile error: incompatible type
类型DataNode是树的子类型。
public class DataNode implements Tree
令我惊讶的是,这对数组也有效:
DataNode[] a2 = new DataNode[0];
Tree[] b2 = a2; // this is okay
这看起来有点奇怪。有谁能给出一个解释吗?
<? extends T>
表示我们可以将任何 T 子类型放入一个集合中。那么如何将两个子类 T 的列表合并为一个 T 列表呢? - Charles Follet<? extends T>
表示“它是一些未知类型,它是 T 的子类型”。 - Jon Skeet