无法在java中将类型T的对象添加到List <t>

时间:2017-11-16 01:59:54

标签: java generics

我一直在学习Java中的泛型。虽然我理解有关类型推断,参数化类和方法的概念,但在实验时我遇到了一个奇怪的情况。

我已经实现了一个Box类,它可以用来保存T类的项目。我使用List作为这个抽象的内部数据结构。以下是我的代码:

public class Box<T> {

    private List<T> items;

    public Box(){
        items = new ArrayList<>();
    }

    public <T> void addItemToBox(T t){
        items.add(t);
    }
}

我在items.add(t)上遇到编译时错误,说List中的add(T)不能应用于(T)。我无法弄清楚这个错误的原因。另外,我不明白为什么我不能将类型为T的项添加到由T参数化的列表中

1 个答案:

答案 0 :(得分:11)

您已在方法<T>上对通用类型变量addItemToBox进行了本地重新声明,该方法会隐藏类Box<T>上的那个。

<T>

上的方法上的List<T> items;不一样

您当前的代码100%相当于:

public class Box<T> {

    private List<T> items;

    public Box(){
        items = new ArrayList<>();
    }

    public <T2> void addItemToBox(T2 t){
        items.add(t);
    }
}

如果您这样看,应该清楚为什么您的代码无法编译。

解决方案:移除方法声明前面的<T>

public void addItemToBox(T t)