我一直在学习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)
| 归档时间: |
|
| 查看次数: |
606 次 |
| 最近记录: |