【发布时间】:2018-03-10 12:49:20
【问题描述】:
我在尝试使用基本泛型时遇到了一些错误。以下是挑战的简化版本;
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。例子;
exampleInstance.add(0, new Water());
exampleInstance.add(1, new Juice());
【问题讨论】:
-
这里的关键见解是
List<? extends Liquid>确实不是 表示“Liquid的各种子类的列表”。它的意思是“各种对象的列表,它们都是Liquid的相同 子类型,但我不知道具体是哪一个”。如果您理解这一点,那么这里的其余行为应该是有意义的。