Java 如何将方法引用传递给协变参数
假设我们有以下类和方法:Java 如何将方法引用传递给协变参数,java,generics,lambda,covariance,method-reference,Java,Generics,Lambda,Covariance,Method Reference,假设我们有以下类和方法: class Fruit {} class Orange extends Fruit {} void process(Consumer<? extends Fruit> action) {} void eatOnlyOranges(Orange evt) {} 我可以更改流程(Consumer的签名吗?您需要将Consumer强制转换为特定类型 process((Consumer<Orange>) this::eatOnlyOranges)
class Fruit {}
class Orange extends Fruit {}
void process(Consumer<? extends Fruit> action) {}
void eatOnlyOranges(Orange evt) {}
我可以更改
流程(Consumer的签名吗?您需要将Consumer
强制转换为特定类型
process((Consumer<Orange>) this::eatOnlyOranges)
过程((消费者)此::EatOnlyRanges)
除了@EmersonCod的答案,将方法签名更改为
<T extends Fruit> void process(Consumer< T > action) {
// ...
}
作废流程(消费者操作){
// ...
}
似乎做了这项工作。我想避免这种情况,这就是为什么我问如何更改方法签名。奇怪的是,它工作正常,ConsumerIt是一个编译器错误,我提出了一个问题->
process((Consumer<Orange>) this::eatOnlyOranges)
<T extends Fruit> void process(Consumer< T > action) {
// ...
}