【Kotlin 入門指南】系列文章目錄:https://bit.ly/3t8awwL
Kotlin 線上課程教學影片:https://bit.ly/3qJ5a5Q
在 Kotlin 中,透過使用 val 或 var 定義屬性時,Java 預設會建立對應的 getter 和 setter 方法。若想在 Java 直接訪問該欄位,可以運用 @JvmField 註解。這會讓 Kotlin 編譯器將屬性生成為公開的欄位,而非建立 getter 和 setter 方法。如此一來,即可在 Java 程式碼中直接存取該欄位,無需呼叫 getter 和 setter 方法。
檔名錯誤或檔案放置不正確的情況下,將會導致編譯錯誤或呼叫時的問題,需要特別留意:
當使用註解 @JvmField
修飾 name 欄位,如此一來 Java 則可以直接存取該欄位,不用透過 getter。而 score 欄位沒有修飾,則需要透過 getter 來獲取。
package com.teachable.hkt //沒有設定 package 名稱,Java 無法順利呼叫使用
class KotlinClassDemo (@JvmField val name: String, val score: Int)
package com.teachable.hkt;
public class JavaClassDemo {
public static void main(String[] args) {
//完整呼叫 Kotlin 寫法
//com.teachable.hkt.KotlinClassDemo k = new com.teachable.hkt.KotlinClassDemo("HKT", 100);
KotlinClassDemo k = new KotlinClassDemo("HKT", 100);
System.out.println(k.name);//使用 @JvmField,可以直接使用屬性名稱
System.out.println(k.getScore());//沒有使用 @JvmField,採 getter 方法
}
}
在這個範例中,我們創建了一個 KotlinClassDemo
的物件 k
。這個物件中包含了兩個不同的屬性或方法的使用方式:name
屬性使用了 @JvmField
註解,因此可以直接使用屬性名稱;而 getScore()
方法則沒有使用 @JvmField
,所以需要透過 getter 方法來取得值。