簡體   English   中英

Java 8 Lambda表達式不起作用

[英]Java 8 Lambda Expressions not working

我正在嘗試以下代碼,並使用JDK 1.8.0_66進行編譯。 我的代碼在語法上似乎正確,我錯過了什么嗎?

interface Executable {
    void execute();
}

class Runner {
    public void run(Executable e) {
        System.out.println("Executing code block!");
        e.execute();
    }
}

public class HelloWorld {
    public static void main(String[] args) {
        Runner runner = new Runner();

        runner.run(new Executable() {
            public void execute() {
                System.out.println("IN ANONYMOUS CLASS EXECUTE");
            }
        });
    }

    runner.run(() -> System.out.println());

}

引發以下編譯錯誤:

App.java:25: error: <identifier> expected
        runner.run(() -> System.out.println());
                  ^
App.java:25: error: illegal start of type
        runner.run(() -> System.out.println());
                   ^
App.java:25: error: ';' expected
        runner.run(() -> System.out.println());

您的語句在定義了runnner變量的塊之外。 應該是這樣的:

public static void main(String[] args) {
    Runner runner = new Runner();

    runner.run(new Executable() {
        public void execute() {
            System.out.println("IN ANONYMOUS CLASS EXECUTE");
        }
    });

    runner.run(() -> System.out.println());
}

該行代碼必須位於代碼塊內。 因此,您需要將其移至main方法的主體中:

更改

} // end of main

runner.run(() -> System.out.println());

    runner.run(() -> System.out.println());
} // end of main

Runner.run(()-> System.out.println()); -是主要方法之外。 將代碼放入main方法中,它將可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM