Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个程序会打印;喂;?(函数指针在Java中如何转换为Runnable.run())_Java_Java 8 - Fatal编程技术网

为什么这个程序会打印;喂;?(函数指针在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
“语法现在只是语法糖”这是不准确的,否则,本例中的堆栈跟踪将是相同的