私はこのジェネリッククラスを持っています
public class BinTree<T> {
T value;
List<BinTree<? extends T>> branch = new ArrayList<BinTree<? extends T>>();
public BinTree(T v){ value = v;}
public void addBranch(BinTree<? extends T> tree){
if(branch.size() == 2){
System.out.println("You can only have two childs");
}else{
branch.add(tree);
}
}
public BinTree<? extends T> getBranch(int n){ return branch.get(n);}
}
そしてその実装はこちら
public static void main(String[] args){
BinTree<Number> firstBinTree = new BinTree<Number>(0);
firstBinTree.addBranch(new BinTree<Integer>(5));
firstBinTree.addBranch(new BinTree<Double>(6.5));
Number o = firstBinTree.getBranch(0).value;
firstBinTree.getBranch(0).addBranch(new BinTree<Integer>(6));
}
しかし、この行
firstBinTree.getBranch(0).addBranch(new BinTree<Integer>(6));
タイプ整数の別の BinTree を追加することはできません。何故ですか?addBranch メソッドで、タイプ (この場合は数値) のサブクラスである限り、リストに追加される任意のタイプを追加できると宣言しましたが、どうしてできないのでしょうか? Integer は Number のサブクラスではありませんか?