【Kotlin 入門指南】系列文章目錄:https://bit.ly/3t8awwL
Kotlin 線上課程教學影片:https://bit.ly/3qJ5a5Q
Kotlin 的函式可以作為參數使用,它們被歸類為一種資料型別,稱為「Function Types」。當 Java 呼叫這種型別的 Kotlin 函式時,會使用 invoke
關鍵字進行呼叫。通過反編譯程式碼,可以得知 Kotlin 中的 Function Types 資訊。
檔名錯誤或檔案放置不正確的情況下,將會導致編譯錯誤或呼叫時的問題,需要特別留意:
//沒有設定 package 名稱,Java 無法順利呼叫使用
package com.teachable.hkt
class KotlinClassDemo {
//val greeting: (String) -> Unit = { it -> println(it) }
val greeting = { msg: String -> println(msg) }
}
fun main() {
val k = KotlinClassDemo()
k.greeting("哈囉~HKT線上教室")
}
package com.teachable.hkt;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
public class JavaClassDemo {
public static void main(String[] args) {
KotlinClassDemo k = new KotlinClassDemo();
//FunctionN 0~22 參數,最多23個參數
Function1<String, Unit> javaK = k.getGreeting();
javaK.invoke("哈囉~HKT線上教室");
}
}
在這個範例中,javaK
變數的型別是 Function1<String, Unit>
。這意味著它是一個接收一個字串參數(String)並返回 Unit(類似於 Java 中的 void)的函數。
k.getGreeting()
返回的是一個能夠接收一個字串參數的函數,因此這個函數符合 Function1<String, Unit>
這個型別的要求。
最後,透過 javaK.invoke("哈囉~HKT線上教室")
,實際呼叫了這個函數,傳遞了一個字串參數 "哈囉~HKT線上教室"。整體來說,Function Types 讓你可以把函數當作物件來操作,以更靈活地傳遞和使用它們。