Java中无返回值方法的函数式接口返回类型问题咨询
解决Java无返回值方法引用的返回类型问题
你遇到的核心问题是没选对匹配无返回值方法的函数式接口,以下是具体解决方案:
针对无参无返回的foo()方法
foo()是无参数、无返回值的方法,对应的标准函数式接口是Runnable——它的run()方法签名和foo()完全一致(void run())。注意不要用FunctionalInterface,它只是标记函数式接口的注解,并非具体接口类型。
修改后的fooBar():
public Runnable fooBar() { return this::foo; }
针对带String参数无返回的bar()方法
bar(String s)是接收String参数、无返回值的方法,对应的标准函数式接口是Consumer<String>——它的accept(T t)方法签名和bar()匹配(void accept(String s))。
之前用Function<String, Void>报错的原因是:Function要求实现方法必须返回一个值(哪怕是Void类型也需要显式返回null),但bar()是void类型,没有返回值,两者逻辑不兼容。
修改后的barFoo():
public Consumer<String> barFoo() { return this::bar; }
完整可运行代码
import java.util.function.Consumer; class FooBar { private void foo() { System.out.println("foo executed"); } private void bar(String s) { System.out.println("bar executed with: " + s); } public Runnable fooBar() { return this::foo; } public Consumer<String> barFoo() { return this::bar; } // 测试调用示例 public static void main(String[] args) { FooBar fb = new FooBar(); fb.fooBar().run(); fb.barFoo().accept("test string"); } }
内容的提问来源于stack exchange,提问作者Mradul Singhal
相关产品推荐
相关产品推荐

