编程语言
首页 > 编程语言> > 功能接口如何在Java 8中工作

功能接口如何在Java 8中工作

作者:互联网

这是我研究功能接口概念时遇到的示例.

interface Sayable{  
   void say();  
}  
public class MethodReference {  
    public static void saySomething(){  
        System.out.println("Hello, this is static method.");  
    }  
    public static void main(String[] args) {  
        // Referring static method  
        Sayable sayable = MethodReference::saySomething;  
        // Calling interface method  
        sayable.say();  
    }  
} 

这是在打印“您好,这是静态方法”.运行时在输出中.我的问题是,当我们调用say()方法(未实现)时,它如何打印输出

解决方法:

您可以这样想方法参考:

Sayable sayable = new Sayable() {

    @Override
    void say() {
        // Grab the body of the method referenced by the method reference,
        // which is the following:
        System.out.println("Hello, this is static method.");
    }
}

该方法引用有效,因为

>目标类型是功能接口Sayable(您正在尝试将结果存储为Sayable类型);和
>对saySomething()的方法引用的签名与功能接口方法say()相匹配,即参数和返回类型match1.

被称为变量sayable的Sayable实例的say()方法的实现等于该方法引用所引用的方法的主体.

因此,就像JB Nizet在评论中说的那样,say()实际上已实现.

1一点细节:“匹配”一词并不完全意味着“相等”.例如.如果saySomething()返回一个int,它仍然可以工作,尽管目标类型的唯一方法将返回类型定义为void.

标签:functional-interface,java-8,java
来源: https://codeday.me/bug/20191108/2005531.html