從Kotlin調用Java功能接口

簡要演示瞭如何使用一次性和多次使用泛型從Kotlin調用功能接口。

基本

以下是用Java定義的功能接口:

從Kotlin調用Java功能接口

注意,一個接口不需要被註釋@FunctionalInterface為一個接口。

在Kotlin中,可以使用以下代碼來實現:

從Kotlin調用Java功能接口

由於該Executor接口只有一個函數和一個輸入參數,因此可以為傳遞給的lambda分配類型execute。這樣就無需將其顯式定義為Runnable。這被稱為SAM(小號英格爾 bstract 中號 ethod)變換,見科特林文檔的詳細信息。

實現相同目標的更詳細的方法如下:

從Kotlin調用Java功能接口

如果您使用的是Intellij,它將幫助您找到第一個解決方案。

單類型泛型

讓我們使其更加令人興奮,並在本回閤中包含一些泛型。使用Java接口和一個函數來調用它:

從Kotlin調用Java功能接口

doStuff可以使用以下Kotlin代碼調用該函數:

從Kotlin調用Java功能接口

最簡化代碼的返回類型取決於lambda的結果,在這種情況下為a String。

多類型泛型

當泛型變得更加複雜時該怎麼辦?我對示例代碼做了一些說明,以證明這一點:

從Kotlin調用Java功能接口

我實際上很難想到一個示例來演示輸入和輸出泛型。我認為這段代碼很醜陋,不太可能代表真正的代碼。儘管如此,它仍然足以作為示例。

要調用此代碼,請使用以下代碼:

從Kotlin調用Java功能接口

實際上,正如我第二次提到的那樣,通用輸入類型A(B在本示例中)將由外部來源提供。此外,泛型類型將在總體類上指定,或者從一開始就被鎖定為特定類型。


分享到:


相關文章: