为什么这个程序会打印;喂;?(函数指针在Java中如何转换为Runnable.run())
下面的示例程序打印为什么这个程序会打印;喂;?(函数指针在Java中如何转换为Runnable.run()),java,java-8,Java,Java 8,下面的示例程序打印Hello。方法exampleMethod(Runnable toRun)有一个Runnable类型参数。函数指针MyTest::sayHello没有运行方法。它是如何执行的 public class MyTest { // Method that takes a "method" as argument static void exampleMethod(Runnable toRun) { toRun.run(); } //
Hello
。方法exampleMethod(Runnable toRun)
有一个Runnable类型参数。函数指针MyTest::sayHello没有运行方法。它是如何执行的
public class MyTest {
// Method that takes a "method" as argument
static void exampleMethod(Runnable toRun) {
toRun.run();
}
// Method to pass
static void sayHello() {
System.out.println("Hello");
}
public static void main(String[] args) throws Exception {
exampleMethod(MyTest::sayHello); // prints "Hello"
}
}
main方法中的代码如下所示:
Runnable runnable = () -> {
MyTest.sayHello();
};
exampleMethod(runnable);
Java中没有指针(至少程序员无法访问)。目前,语法只是匿名接口实现的语法糖。或者,您可以说,Java迄今为止引入函数类型的方式是,始终将它们转换为特定的接口类型,该接口必须是具有一致方法的函数接口。在这里,
void run()
和void sayHello()
具有一致的函数类型,因此,可以通过让其run()
方法调用sayHello()
@Turing85来实现Runnable
“语法现在只是语法糖”这是不准确的,否则,本例中的堆栈跟踪将是相同的