【Kotlin 入門指南】Kotlin 註解 @JvmStatic & Companion Object

2023/12/11閱讀時間約 3 分鐘
【Kotlin 入門指南】系列文章目錄:https://bit.ly/3t8awwL
Kotlin 線上課程教學影片:https://bit.ly/3qJ5a5Q

@JvmStatic & Companion Object

Companion Object 是 Kotlin 中一個特殊的物件,用來在類別內部創建靜態成員。當你在一個類別內部建立 companion object 時,裡面的成員就可以像 Java 中的 Static 靜態成員一樣被使用,不需要通過該類別的實例來訪問。

在 Kotlin 中使用 Companion Object 定義的函數或屬性,並且搭配使用 @JvmStatic 將這些函數或屬性暴露為 Java 中的靜態方法或靜態屬性,方便 Java 程式碼使用。

Kotlin 註解 @JvmStatic & Companion Object 範例

範例檔案目錄結構

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

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

Main.kt

在這個範例中,name 屬性與 getStaticSampleData 有使用 @JvmStatic 註解,Java 可以呼叫使用,然而,沒有註解的 score 屬性和 getNonStaticSampleData 方法則無法被 Java 呼叫。

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

class KotlinClassDemo {
companion object {
@JvmStatic
val name = "HKT"
val score = 100

@JvmStatic
fun getStaticSampleData() {
println("JvmStatic")
}

fun getNonStaticSampleData() {
println("non JvmStatic")
}
}
}

JavaClassDemo.java

package com.teachable.hkt;

public class JavaClassDemo {
public static void main(String[] args) {

System.out.println(KotlinClassDemo.getName());// name 有加註解 @JvmStatic,可以獲取
//System.out.println(KotlinClassDemo.getScore());// 錯誤,score 沒有 @JvmStatic,不能獲取


KotlinClassDemo.getStaticSampleData();// getStaticSampleData 有加註解 @JvmStatic,可以獲取
//KotlinClassDemo.getNonStaticSampleData();//錯誤,沒有 @JvmStatic,不能呼叫
}
}
3會員
176內容數
本指南將以清晰易懂的方式介紹基礎概念,讓你能夠快速上手,輕鬆踏上學習 Kotlin 的旅程 透過簡單易懂的方式,讓你將能夠在短時間內建立起對 Kotlin 的基本了解,並開始實際應用於你的專案之中。不論你是想要進入 Android 開發領域或者只是想探索新的程式語言,這份指南都會成為你學習 Kotlin 的理想起點。
留言0
查看全部
發表第一個留言支持創作者!