Java 泛型不允许我向列表中添加另一个项目

标签 java generics

我有这个通用类

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/

相关文章:

java - 2D 元胞自动机故障

java - Primefaces 在单行上显示列表

java - 泛型类型的类参数

typescript - 如何使用 Typescript 将类中的变量初始化为其通用值

java - 可以使用泛型 Java 方法的泛型类型来强制执行参数类型吗?

java - 如何在 Slick2D 中绘制从中心旋转的图像?

java - 在Java中计算闰年

java - Eclipse Kepler 在加载时没有响应

c# - 通用接口(interface)和方法问题

c# - 我可以扩展一个泛型类来限制可以使用的类型吗?