如何将方法引用传递给协变参数

How to pass a method reference to a covariant parameter

鉴于我们有以下 类 方法:

class Fruit {}
class Orange extends Fruit {}

void process(Consumer<? extends Fruit> action) {}
void eatOnlyOranges(Orange evt) {}

编译时没有警告。

    Consumer<Orange> consumer = this::eatOnlyOranges;
    process(consumer);

我想允许这个,但它不能编译?

    process(this::eatOnlyOranges);

我可以更改 process(Consumer<? extends Fruit> action) 的签名使其生效吗?

注意:请假设 process(..) 的实现将检查给定的 Consumer 是否可以处理给定的 Fruit。此详细信息与此问题无关。

您需要将 Consumer 转换为特定类型

process((Consumer<Orange>) this::eatOnlyOranges)

除了@EmersonCod 的回答,将方法签名更改为

<T extends Fruit> void process(Consumer< T > action) {
    // ...
}

似乎可以胜任。