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

ada*_*gde 3 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Erw*_*idt 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你这样看,应该清楚你的代码无法编译的原因.

解决方案:删除<T>方法声明前面的内容

public void addItemToBox(T t)
Run Code Online (Sandbox Code Playgroud)