为什么实例方法引用适用于不匹配的签名?

所以我早些时候做了一些编码,发现一个函数的签名只需要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 到底是怎么做到的!?


有没有人解释为什么这有效?


精慕HU
浏览 129回答 1
1回答

婷婷同学_

您可以将方法引用视为创建相应 lambda 表达式的语法糖:String&nbsp;output&nbsp;=&nbsp;test(Foo::produceString);givenproduceString是一个实例方法,上面的表达式等价于String&nbsp;output&nbsp;=&nbsp;test(&nbsp;(Foo&nbsp;foo)&nbsp;->&nbsp;foo.produceString()&nbsp;);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java