Java8-如何声明对返回void的未绑定非静态方法的方法引用

Java8-如何声明对返回void的未绑定非静态方法的方法引用,java,java-8,java-stream,void,method-reference,Java,Java 8,Java Stream,Void,Method Reference,下面是一个简单的类来说明我的问题: package com.example; import java.util.function.*; public class App { public static void main(String[] args) { App a1 = new App(); BiFunction<App, Long, Long> f1 = App::m1; BiFunction<App, Lon

下面是一个简单的类来说明我的问题:

package com.example;

import java.util.function.*;

public class App {

    public static void main(String[] args) {
        App a1 = new App();

        BiFunction<App, Long, Long> f1 = App::m1;
        BiFunction<App, Long, Void> f2 = App::m2;

        f1.apply(a1, 6L);
        f2.apply(a1, 6L);
    }

    private long m1(long x) {
        return x;
    }

    private void m2(long x) {
    }
}
package.com.example;
导入java.util.function.*;
公共类应用程序{
公共静态void main(字符串[]args){
App a1=新App();
双功能f1=App::m1;
双功能f2=App::m2;
f1.应用(a1,6L);
f2.应用(a1,6L);
}
专用长m1(长x){
返回x;
}
私人空间m2(长x){
}
}
f1
,指的是
App::m1
,在
f1
调用
apply
时绑定到
a1
,工作非常好-编译器很高兴,可以通过f1调用。apply很好

f2
,指的是
App::m2
,不起作用


我希望能够定义对无返回类型的未绑定非静态方法的方法引用,但我似乎无法使其工作。

BiFunction
表示接受两个参数并生成结果的函数

我希望能够定义一个对未绑定对象的方法引用 无返回类型的非静态方法

使用一个
BiConsumer
,它表示一个接受两个输入参数且不返回结果的操作

为此:

f2.accept(a1, 6L);

方法引用是App::m2,与您的方法一样,但它不可分配给双函数,因为它不返回值,甚至不返回空值(必须是
null
)。您必须执行以下操作:

f2 = (a,b) -> { m2(a,b); return null; }

如果你想要一个双功能。或者,您可以使用其他答案中提到的双消费者

又一个
void!=作废
:)
f2.accept(a1, 6L);
f2 = (a,b) -> { m2(a,b); return null; }