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

Joh*_*ote 10 java void java-8 java-stream 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, 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) {
    }
}
Run Code Online (Sandbox Code Playgroud)

f1,指的是App::m1,和被绑定到a1f1的来电apply,工作完全正常-编译器是幸福的呼叫可以通过f1.apply就好制成.

f2,指App::m2,不起作用.

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

Ous*_* D. 11

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

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

使用BiConsumer代替表示接受两个输入参数并且不返回结果的操作.

BiConsumer<App, Long> f2 = App::m2;
Run Code Online (Sandbox Code Playgroud)

然后改变这个:

f2.apply(a1, 6L);
Run Code Online (Sandbox Code Playgroud)

对此:

f2.accept(a1, 6L);
Run Code Online (Sandbox Code Playgroud)