次のコードを検討してください (2 つの質問はコード内にあります)。
import java.util.*;
public class Tree<T> {
private T info;
private List<Tree<? extends T>> children = new ArrayList<Tree<? extends T>>();
public Tree<? extends T> getChildren(int n) {
return children.get(n);
}
public void addChildren(Tree<? extends T> children) {
this.children.add(children);
}
public static void main(String[] args) {
Tree<?> b2; // so b2 is a reference of a Tree of unknown type
b2 = new Tree<Number>(); /* to allow b2 to call addChildren() with Tree<? extends Number> aguments */
b2.addChildren(new Tree<Number>()); // 1) why it doesn't work ?
b2.addChildren(new Tree<Integer>()); // neither does this one!
b2.addChildren(new Tree<>()); // 2) but with diamond <> it works ?
}
}
- なぜ機能し
b2.addChildren(new Tree<Number>())
ないのですか? - しかし、それはダイヤモンド <> で動作し
b2.addChildren(new Tree<>())
ます。コンパイラがダイアモンド <> 内で使用する型リストはどれですか?