首先很抱歉标题不是很具体,但我找不到更好更简短的描述性标题!
我有一个这样的接口:
public interface ModelInterface {
public List<? extends Umbrella> getBRs();
}
以及这种模式的几个实现类:
public class Model implements ModelInterface {
// need to use the concrete impl here because of JPA
List<StoneUmbrella> _list = new ArrayList<>();
@Override
public List<? extends Umbrella> getBRs() {
return _list;
}
}
到目前为止,一切都很好。但我也有以下 Util 类:
import java.util.Collection;
public abstract class Util<E, R> {
public R reduce(Collection<E> collection, R initialElement) {
R result = initialElement;
for (E currElement : collection) {
result = reduce(result, currElement);
}
return result;
}
abstract R reduce(R initialElement, E element);
}
现在,当我尝试在我的主代码中调用该实用程序类时,就会出现问题:
import java.util.List;
public class Main {
public static void main(String[] args) {
ModelInterface model = new Model();
List<? extends Umbrella> list = model.getBRs();
Util<Umbrella, Boolean> util = new Util<Umbrella, Boolean>() {
@Override
Boolean reduce(Boolean initialElement, Umbrella element) {
return Boolean.TRUE;
}
};
util.reduce(list, Boolean.FALSE);
}
}
util.reduce行无法编译并显示此消息:Util 类型中的方法 reduce(Collection, Boolean) 不适用于参数 (List<capture#2-of ? extends Umbrella>, Boolean)
当我使用 List<Umbrella> 而不是 List<? extends Umbrella> 但我无法在模型接口中更改它,否则我将无法在 getter 中返回其内部列表。我有点认为以双方都满意的方式实施它是不可能的。
任何人都可以帮忙吗?提前致谢!!