繁体   English   中英

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

[英]Java 8 - how do I declare a method reference to an unbound non-static method that returns void

这是一个简单的类,说明了我的问题:

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

f1 ,引用App::m1 ,并且在f1apply函数中被绑定到a1 ,工作得非常好 - 编译器很高兴并且调用可以通过f1.apply完成。

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

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

BiFunction表示接受两个参数并且产生结果的函数。

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

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

BiConsumer<App, Long> f2 = App::m2;

然后改变这个:

f2.apply(a1, 6L);

对此:

f2.accept(a1, 6L);

方法参考是App :: m2,就像你一样,但它不能分配给BiFunction,因为它不会返回一个值,即使是Void值(必须为null )。 你必须这样做:

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

如果你想要一个BiFunction。 或者,您可以使用其他答案中提到的BiConsumer。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM