java1.8學習-什麼樣的匿名內部類能被lambda語法代替?
阿新 • • 發佈:2018-11-09
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表示式只支援函式式介面。也就是隻有一個抽象方法的介面