我有这个通用类
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 方法中声明它可以添加任何类型,只要它是 Type 的 ia 子类(在本例中为数字),它将被添加到列表中,但我怎么不能? Integer 不是 Number 的子类吗?
最佳答案
它不会知道是否
<? extends T>
我认为 getBranch 和 addBranch 是一样的。所以它会是
<? extends ? extends T>
关于Java 泛型不允许我向列表中添加另一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11732049/