2023-12-11|閱讀時間 ‧ 約 3 分鐘

【Kotlin 入門指南】Java 和 Kotlin 混合使用 - Kotlin 註解 @JvmOverLoads

【Kotlin 入門指南】系列文章目錄:https://bit.ly/3t8awwL
Kotlin 線上課程教學影片:https://bit.ly/3qJ5a5Q

@JvmOverLoads

當你在 Kotlin 程式語言中定義一個有預設參數的函數功能,並給它預設值,@JvmOverloads 可以自動產生多個重載版本的 Java 方法,每個版本都省略了部分參數,讓 Java 代碼可以更簡潔地呼叫這些方法,而不需要填寫所有參數。不會因為沒有預設值,而顯示錯誤。

Kotlin 註解 @JvmOverLoads 範例

範例檔案目錄結構

檔名錯誤或檔案放置不正確的情況下,將會導致編譯錯誤或呼叫時的問題,需要特別留意:

  • 「Main.kt」放在「src/main/kotlin」目錄裡面。
  • 「JavaClassDemo.java」要放在「src/main/java/com.teachable.hkt」目錄裡面。

Main.kt

在這個範例中,在 kotlinFun 函數上使用@JvmOverloads 註解該函數。這個註解的將告訴 Kotlin 編譯器要生成額外的重載函數,以便 Java 能夠以不同的方式呼叫這個函數,且不需要傳遞所有的參數。

package com.teachable.hkt //沒有設定 package 名稱,Java 無法順利呼叫使用

@JvmOverloads
fun kotlinFun(name: String = "HKT", score: Int = 100) {
println("學生姓名:$name, 分數:$score")
}


fun main() {
kotlinFun()
}

JavaClassDemo.java

這段 Java 程式碼展示了如何呼叫 MainKt 物件中的 kotlinFun 函數。在第一個呼叫中,我們沒有傳遞任何參數,因為 @JvmOverloads 註解的存在,Kotlin 會自動生成一個不需要任何參數的版本供 Java 使用。而在第二個呼叫中,我們傳遞了兩個參數,這會調用接收兩個參數的版本。

package com.teachable.hkt;

public class JavaClassDemo {
public static void main(String[] args) {
MainKt.kotlinFun();
MainKt.kotlinFun("test", 66);
}
}
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.