Functional
接口簡介Functional
接口?包含有單一抽象方法(Single Abstract Method
)的接口就是Functional
接口。簡單來講,就是有且只有一個非default方法
的接口。爲何default方法
不被計算進去呢?緣由也很簡單,由於default方法
是已經有了一個實現了啊,因此並非抽象的。多線程
全部Functional
接口都建議打上@FunctionalInterface
註解。
這樣作有兩個好處:異步
lambda表達式
使用。Functional
接口以即可以在lambda表達式
中使用,但實際上這個接口卻包含了一個以上的非default方法
,這時編譯器就會提示你,「小夥,你確定弄錯了什麼,這不是Functional
接口啊」。現實世界中的例子線程
多線程中用於執行無返回結果的Runnable
接口,只有一個run
方法,很「簡單」的嘛!code
@FunctionalInterface public interface Runnable { public abstract void run(); }
使用示例接口
在主線程外異步地執行任務(使用lambda表達式
):編譯器
public static void main(String[] args) { new Thread(() -> System.out.println("Hello 彬哥!")).start(); }
一行代碼仍是作了很多事情的嘛:io
Runnable
。納尼?哪裏?沒錯, 就是() -> System.out.println("Hello 彬哥!")
,這是一個lambda表達式。new Thread()
。start()
。Functional
接口,要打上@FunctionalInterface
註解。