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

【Kotlin 入門指南】Kotlin 註解 @JvmField

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

@JvmField

在 Kotlin 中,透過使用 val 或 var 定義屬性時,Java 預設會建立對應的 getter 和 setter 方法。若想在 Java 直接訪問該欄位,可以運用 @JvmField 註解。這會讓 Kotlin 編譯器將屬性生成為公開的欄位,而非建立 getter 和 setter 方法。如此一來,即可在 Java 程式碼中直接存取該欄位,無需呼叫 getter 和 setter 方法。

Kotlin 註解 @JvmField 範例

範例檔案目錄結構說明

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

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

Main.kt

當使用註解 @JvmField 修飾 name 欄位,如此一來 Java 則可以直接存取該欄位,不用透過 getter。而 score 欄位沒有修飾,則需要透過 getter 來獲取。

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

class KotlinClassDemo (@JvmField val name: String, val score: Int)

JavaClassDemo.java

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 方法來取得值。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.