如何将方法引用传递给协变参数
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) {
// ...
}
似乎可以胜任。
鉴于我们有以下 类 方法:
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) {
// ...
}
似乎可以胜任。