在我学习函数式接口概念时,遇到了以下示例。
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();
}
}
运行时会在输出中打印"Hello, this is static method."。我的问题是,当我们调用未实现的say()方法时,它是如何打印输出的。
MethodReference::saySomething
是Sayable
接口的一个实例,其say()
方法由saySomething
方法实现。https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html - JB NizetSayable
定义为一种类型,一个不接受参数并且不返回任何值的函数,因为Java如此规定。由于MethodReference :: saySomething
就是这样一种类型的函数,所以可以将它分配给该类型的引用。然后就是你对这种引用的使用方式。有一个随意的方法名称来调用该函数确实很奇怪。但你必须接受它。 - CryptoFool