所以我早些时候做了一些编码,发现一个函数的签名只需要Function<FooClass, String>,我可以为 FooClass 的函数传递一个方法,它产生一个字符串(见下面的例子)。所以我发现 java 支持它,我的意思是..它可以编译,public static class Foo { public String produceString() { return "Hello world!"; }}public static String test(Function<Foo, String> produceString) { return produceString.apply(new Foo());}public static void main(String[] args) { // WEIRD CODE BELOW!! Here's the method reference: String output = test(Foo::produceString); System.out.println(output); // Outputs "Hello world!"}我的问题是:java 到底是怎么做到的!?有没有人解释为什么这有效?
1 回答

婷婷同学_
TA贡献1844条经验 获得超8个赞
您可以将方法引用视为创建相应 lambda 表达式的语法糖:
String output = test(Foo::produceString);
givenproduceString
是一个实例方法,上面的表达式等价于
String output = test( (Foo foo) -> foo.produceString() );
添加回答
举报
0/150
提交
取消