这是我用来说明问题的最小代码示例:
public void consumeDerived(Consumer<Derived> derivedConsumer, Derived derivedParameter) {
consumeBase(derivedConsumer, derivedParameter);
}
public void consumeBase(Consumer<? extends Base> baseConsumer, Base baseParameter) {
baseConsumer.accept(baseParameter);
}
这个想法是对consumeDerived
的调用只是传递给consumeBase
方法。据我所知,来电baseConsumer.accept()
应该可以输入Base
类型或输入Derived extends Base
。
但是我收到错误:java: incompatible types: Base cannot be converted to capture#1 of ? Base
。
我需要做些什么来完成这项工作?
答案 0 :(得分:2)
问题是Consumer<? extends Base>
是某事的消费者,其扩展了Base
。它可能是Consumer<Derived>
,并且无法接受Base
作为参数 - 它不够具体。
您可以添加泛型类型参数来解决此问题:
public <T extends Base> void consumeBase(Consumer<T> baseConsumer, T baseParameter) {
baseConsumer.accept(baseParameter);
}
值得注意的是consumeDerived
现在已经多余了。