错误:找到'T',必填:'?延伸Liquid'

时间:2018-03-10 12:49:20

标签: java generics

我在尝试使用基本泛型时遇到了一些错误。以下是挑战的简化版本;

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());

1 个答案:

答案 0 :(得分:2)

使用上限通配符声明您的字段:List<? extends Liquid> holder只有在您指定它的子类或者想要在方法中传递时才有意义。
在这种情况下,您无法在List中添加任何空值。

您不在其用例中。 因此,请声明private List<Liquid> holder能够在列表中添加Liquid实例。