1. 程式人生 > >java1.8學習-什麼樣的匿名內部類能被lambda語法代替?

java1.8學習-什麼樣的匿名內部類能被lambda語法代替?

java1.8學習-什麼樣的匿名內部類能被lambda語法代替?

java1.8好多新的特性真的很有意思,特別是Lambda。在學習的時候發現並不是所有的匿名內部類都可以用Lambda代替。

lambda表示式用得最多的場合就是替代匿名內部類,而實現Runnable介面是匿名內部類的經典例子。lambda表示式的功能相當強大,用()->就可以代替整個匿名內部類。
請看程式碼:

@Test
public void oldRunable() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("The old runable now is using!");
        }
    }).start();
}

而如果使用lambda表示式:

@Test
public void runable() {
    new Thread(() -> System.out.println("It's a lambda function!")).start();
}

但問題來了,這個替代匿名內部類的方式並不是所有情況都適合。
翻閱官方文件發現有關Funtional interfaces的說法:

Functional interfaces. The Runnable interface—like the Callable

即:Lambda表示式只支援函式式介面。也就是隻有一個抽象方法的介面