你曾經使用
interface
作為 callback 嗎?
在 Java 中,我們會這樣子使用 Callback
- 定義一個
interface
- 在某一個Class 中,將這個
interface
當作參數傳入
這邊我們可以發現,當呼叫 Class1
的 method
時,我們需要把 Callback 當作參數傳進 method
中。
我們會在呼叫端實作 Callback
,並把它傳入 method
中。
這邊在 method
的參數欄中,直接 new 一個 Callback,並且實作它的方法。
如果是用 Java 8 以上,那麼實作 Callback
這段可以改成用 Lambda 表達式。
在 Kotlin 是怎麼實現 Callback 呢?
- 同樣的,我們定義一個
interface
- 一樣在
Class1
的method
中傳入這個interface
- 如何使用呢?
在 method
中,使用 object
建立匿名的 Callback 實例,並且實作裡面的方法( invoke
)。
與 Java 直接在參數上 new Callback
的方式雷同。
Java 8 可以改為使用 Lambda 表達式,Kotlin 能夠做到嗎?
Functional Interface (SAM)
- Functional Interface 的意思是功能性介面,我認為就是可以當作 function 的介面。
- SAM 是
Single Abstract Method
,單一抽象方法。
綜合以上,當 interface
裡面只有一個方法時,可以改成 Functional Interface
如何使用呢?
- 只要在關鍵字
interface
前方加上fun
即可。
- 在方法中,同樣可以當作參數傳入
- 呼叫端,只需要使用
{ }
就可以直接實作這個方法
- 如果參數只有一個,或是 functional interface 是位於參數最後方。括弧可以省略。
注意事項
- 介面裡面只有一個方法時,才能夠使用 Functional Interface