Просто сталкивайтесь с этой проблемой:
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
Это немного странно. Может ли кто-нибудь дать объяснение по этому поводу?