2016-02-01 73 views
1

我正在嘗試以下代碼並使用JDK 1.8.0_66編譯它。我的代碼似乎在語法上是正確的,我錯過了什麼?Java 8 Lambda表達式不起作用

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()); 
+2

如果您收到編譯錯誤,您的代碼幾乎按照定義,在語法上不正確。 –

+0

謝謝我感到愚蠢!沒有真正注意到我的lambda表達式超出了主代碼塊 – alcaideredb

回答

3

這行代碼需要一個代碼塊中。所以,你需要把它移動到main方法的主體:

變化

} // end of main 

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

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

謝謝!我沒有注意到! :) – alcaideredb

+0

@alcaideredb不客氣 –

4

你的說法是塊,其中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()); 
} 
-1

runner.run(() - > System.out.println()); - 在主要方法之外。把代碼放在主要的方法裏面,它會工作得很好。

+0

此答案已經在主貼的評論中表達並實現 – jhhoff02

+0

謝謝。但我沒有注意到這一點。評級下降不是很好的態度。 – kavita