我在尝试使用基本泛型时遇到了一些错误。以下是挑战的简化版本;
public final class Example {
private List<? extends Liquid> holder;
private List<List<? extends Liquid>> holder2;
public Example() {
holder = new ArrayList<>();
holder2 = new ArrayList<>();
}
public <T extends Liquid> void add(int position, T value) {
if (holder != null)
holder.add(position, value); //<- Error Here
}
public <T extends Liquid> void add(int position, List<T> value) {
if (holder != null)
holder.add(position, value); //<- This works
}
}
我希望变量持有者存储不同的subtypes
Liquid。例;
exampleInstance.add(0, new Water());
exampleInstance.add(1, new Juice());
答案 0 :(得分:2)
使用上限通配符声明您的字段:List<? extends Liquid> holder
只有在您指定它的子类或者想要在方法中传递时才有意义。
在这种情况下,您无法在List中添加任何空值。
您不在其用例中。
因此,请声明private List<Liquid> holder
能够在列表中添加Liquid实例。