Kotlin 中 Java 靜態函式的等價物
- Kotlin 等價於 Java 的靜態函式
-
使用
Companion
物件在 Kotlin 中實現靜態功能 -
使用
@JvmStatic
註解在 Kotlin 中實現靜態功能 - 在 Kotlin 中使用包級函式實現靜態功能
使用 Java 程式語言的 Android 開發人員非常瞭解 static
關鍵字。Java 的 static
關鍵字是一個非訪問修飾符。
我們可以使用 static
關鍵字在 Java 中建立靜態變數和方法。它有助於提高記憶體管理效率。
Java 虛擬機器 (JVM) 只為這些變數和函式分配一次記憶體,從而使它們具有記憶體效率。但是 Kotlin 現在是 android 開發的官方語言。
隨著開發人員從 Java 遷移到 Kotlin,最大的障礙之一是在 Kotlin 中建立靜態函式。Kotlin 中沒有 static
這樣的關鍵字。
在本文中,我們將學習 Kotlin 中 Java 的 static
關鍵字的等價物。
Kotlin 等價於 Java 的靜態函式
雖然 Kotlin 程式語言沒有 static
關鍵字,但我們仍然可以在 Kotlin 中實現靜態功能。
靜態方法的核心好處是記憶體管理效率。因此,為了實現靜態功能,我們需要找到一種方法來確保記憶體只分配一次並且值不可更改。
在 Kotlin 中實現靜態功能的三種方式:
- 使用
companion
物件 - 使用
@JvmStatic
註釋 - 使用包級功能
我們將逐一介紹這三種方法。我們還將檢視如何實現它們的示例。
使用 Companion
物件在 Kotlin 中實現靜態功能
我們可以使用 companion
關鍵字建立一個伴隨物件。JVM 會將伴隨物件儲存在與類相同的檔案中;因此,物件可以訪問類的所有私有變數和函式。
伴隨物件與類一起初始化;因此,記憶體分配只發生一次。伴隨物件的語義類似於 Java static
初始化器的語義。
現在我們知道什麼是伴生物件以及它們是如何工作的,讓我們看一個例子。在這個例子中,我們將建立一個伴生物件,看看它如何處理記憶體管理以在 Kotlin 中實現靜態功能。
fun main(args: Array<String>) {
// Accessing static variables and methods without creating objects
println("Welcome!"+'\n' + "Accessing function of the ExampleClass without creating an object."
+ '\n' + ExampleClass.staticFunction());
}
class ExampleClass{
companion object {
fun staticFunction(): String {
return "Static Method!"
}
}
}
輸出:
點選這裡檢視上面示例程式碼的演示。
如果我們嘗試更改上述程式碼中的變數,則會丟擲錯誤。由於靜態
方法和變數只分配一次記憶體,更改變數會出錯。
使用 @JvmStatic
註解在 Kotlin 中實現靜態功能
除了使用 companion
物件外,我們還可以使用 @JvmStatic
註釋來實現靜態功能。根據官方文件,這個註解指定 JVM 應該建立一個額外的靜態方法。
使用 @JvmStatic
註釋非常簡單。我們只需要在我們想要成為靜態
的函式之前新增註釋。
這是一個演示相同的示例。
fun main(args: Array<String>) {
// Accessing static variables and methods without creating objects
println("Hello!"+'\n' + ExampleClass.staticFunction());
}
object ExampleClass{
@JvmStatic
fun staticFunction(): String {
return "Static Method!"
}
}
輸出:
點選這裡檢視上面示例程式碼的演示。
在 Kotlin 中使用包級函式實現靜態功能
我們還可以通過將方法或變數宣告為包級成員來實現 Kotlin 中的靜態功能。使用包級函式是實現靜態功能的便捷方式。
你首先必須在任何包中建立一個基本的 .kt
檔案,然後定義方法。定義後,你可以匯入包並從任何類呼叫方法。
這是你如何做到的。
// create a .kt file first in any package and define the method
package example.app
fun product(x: Int, y: Int){
return x*y
}
// after defining the method, import the package and call it from any class
import example.app.product
product (3*7)
Kailash Vaviya is a freelance writer who started writing in 2019 and has never stopped since then as he fell in love with it. He has a soft corner for technology and likes to read, learn, and write about it. His content is focused on providing information to help build a brand presence and gain engagement.
LinkedIn