Java 8方法引用默认方法实现

use*_*001 3 java

 interface HelloWorld {
    String hello(String s);
}
public static void main(String[] args) {
        HelloWorld h = String::new;
        System.out.println(h.hello("dasdasdadasd"));
}
Run Code Online (Sandbox Code Playgroud)

当我执行上面的方法时,它返回我在参数dasdasdadasd中传递的值. 执行字符串类的哪个方法,或者是java在运行时提供的默认实现,或者默认情况下它调用supplier.get()方法?

Era*_*ran 5

h被赋予了public String(String original)String类的构造函数的方法引用.这是唯一与String hello(String s)您的HelloWorld界面方法的签名匹配的构造函数.

因此,h.hello("dasdasdadasd")创建一个String值等于的新实例"dasdasdadasd"并返回该实例.

HelloWorld h = String::new;
Run Code Online (Sandbox Code Playgroud)

相当于:

HelloWorld h = s -> new String(s);
Run Code Online (Sandbox Code Playgroud)