Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将方法引用传递给协变参数_Java_Generics_Lambda_Covariance_Method Reference - Fatal编程技术网

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) {
    // ...
}