2015-04-21 89 views
5

我讀通過Oracle的lambda表達式的教程之一,和整個下面的代碼來:你可以在初始化過程中實現一個接口嗎?

http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html

public class RunnableTest { 
    public static void main(String[] args) { 

    System.out.println("=== RunnableTest ==="); 

    // Anonymous Runnable 
    Runnable r1 = new Runnable(){ 

    @Override 
    public void run(){ 
     System.out.println("Hello world one!"); 
    } 
    }; 

    // Lambda Runnable 
    Runnable r2 =() -> System.out.println("Hello world two!"); 

    // Run em! 
    r1.run(); 
    r2.run(); 
    } 
} 

我的問題是他們爲什麼不創建類的時候實現Runnable?由於它們在初始化r1時覆蓋了run方法,是否照顧了實現?

+1

我相信,感覺它是在一個教程的背景下,他們正在做它來演示可用的各種選項。 – CalebB

回答

2

是的,這被稱爲Java中的匿名類。

https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

可以實現一個接口或使用new運營商,這將創造你的時候定義無名子類的新實例時,擴展類。它主要用於編寫要在另一個線程中使用的代碼或作爲回調,因爲您只能獲得一個實例。

Java 8中的新lambda語法使用單一方法(例如Runnable或java.util.function中的接口)替換接口的匿名類。這就是他們在示例中展示的內容。

相關問題