Java 8 - 我如何声明对未绑定的非静态方法的方法引用 returns void
Java 8 - how do I declare a method reference to an unbound non-static method that returns void
这是一个简单的 class 来说明我的问题:
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
,并在 f1
对 apply
的调用中绑定到 a1
,工作得很好 - 编译器很高兴,可以通过 f1.apply 拨打电话就好了。
f2
,参考App::m2
,无效。
我希望能够定义对没有 return 类型的未绑定非静态方法的方法引用,但我似乎无法使其工作。
BiFunction
表示接受两个参数 a 并产生结果 的函数。
I'd like to be able to define a method reference to an unbound
non-static method with no return type
改用 BiConsumer
表示接受两个输入参数 和 returns 没有结果的操作 .
BiConsumer<App, Long> f2 = App::m2;
然后改变这个:
f2.apply(a1, 6L);
对此:
f2.accept(a1, 6L);
方法引用是 App::m2,就像您拥有的一样,但它不能分配给 BiFunction,因为它没有 return 值,甚至是 Void 值(必须是null
)。你必须做:
f2 = (a,b) -> { m2(a,b); return null; }
如果你想要一个 BiFunction。或者,您可以使用其他答案中提到的 BiConsumer 。
这是一个简单的 class 来说明我的问题:
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
,并在 f1
对 apply
的调用中绑定到 a1
,工作得很好 - 编译器很高兴,可以通过 f1.apply 拨打电话就好了。
f2
,参考App::m2
,无效。
我希望能够定义对没有 return 类型的未绑定非静态方法的方法引用,但我似乎无法使其工作。
BiFunction
表示接受两个参数 a 并产生结果 的函数。
I'd like to be able to define a method reference to an unbound non-static method with no return type
改用 BiConsumer
表示接受两个输入参数 和 returns 没有结果的操作 .
BiConsumer<App, Long> f2 = App::m2;
然后改变这个:
f2.apply(a1, 6L);
对此:
f2.accept(a1, 6L);
方法引用是 App::m2,就像您拥有的一样,但它不能分配给 BiFunction,因为它没有 return 值,甚至是 Void 值(必须是null
)。你必须做:
f2 = (a,b) -> { m2(a,b); return null; }
如果你想要一个 BiFunction。或者,您可以使用其他答案中提到的 BiConsumer 。