我在尝试使用基本泛型时遇到了一些错误。以下是挑战的简化版本;
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> holder
仅当您分配给它的子类或要在方法中传递它时才有意义。
在这种情况下,您不能在 List 中添加除 null 之外的任何内容。
你不在它的用例中。所以,而不是,声明private List<Liquid> holder
能够在您的列表中添加 Liquid 实例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句