Kotlin中如何實作類似Java或C#中的靜態方法,本文總結了幾種方法,分別是:套件層級函數、伴生物件、擴充函數和物件宣告。這需要大家根據不同的情況來選擇。
大家可以在網路上搜到不少這樣的文章,官方推薦是包級函數,也有人說用伴生對象(companion class)。這些都是不錯的選擇,但並不完善,我們在不同的情況下有更好的選擇。我總結了幾種方法,分別是:包級函數、伴生物件、擴展函數和物件聲明。這需要大家根據不同的情況來選擇。
一、套件級函數
Kotlin和Java及C#不同的是,可以在套件裡面直接宣告函數###。做法和類別中是一樣的,這裡就不多說了,的確是一個非常好的選擇。適用於函數不需要不包內部的類別進行資料共享的方法。
二、伴生物件
大家在使用Java的時不知有沒有註意到,Java類別中的靜態
變數及方法是在什麼時候初始化的?是在靜態方法第一次呼叫時還是在對應的Java類別被載入時?答案是在Java類別被載入時(也就是說如果你呼叫過Java類別中的實例變數及方法後,即使你沒有使用靜態變數及方法,靜態變數已經初始化了)。這種現像用伴生來描述是不是很貼切。
fun main(args: Array<String>) { Books.getBestSellers() } class Books(var name: String, val page: Int) { fun getWordCount()=page*100 companion object ComBooks{ var bestSellers=arrayOf("Harry Potter\r\t","Lord of the Rings\r\t") fun getBestSellers() { bestSellers.forEach{v->println(v)} } } }伴生類別是用companion來宣告的,他在伴生物件所在的類別被加載,伴生物件被初始化,與Java靜態成員一樣。其可以匿名或與包含他的類別類別名稱相同。呼叫有兩種:
Books.ComBooks.getBestSellsers()?或
Books.getBestSellsers()?。
三、擴充函數
public class Utils { public static boolean isEmpty(String string){ return string != null && string.length() == 0; } public static boolean isWeakEmpty(String string){ return isEmpty(string) && string.trim().length() == 0; } }我們當然可以用上面的兩種方法來實作這些靜態方法,但是我們有更好的方法。
fun String.isEmpty() = this != null && this.length == 0; fun String.isWeakEmpty()= this.isEmpty() && this.trim().length == 0上面兩行程式碼給String這個類別擴展了兩個函數,這兩個函數就可以像其原生函數一樣調用,程式碼十分優美。其實擴充函數並沒有修改String類別內部的東東,也只是為String加了兩個靜態函數,但相較於Java的Utils類,可讀性有了非常大的提升。
四、物件宣告
object AppInfo{ var AppName = "Kotlin Message" var AppAuthor = "Riley Ge" fun toSimpleString() { println("AppName:$AppName,AppAuthor:$AppAuthor") } }發現Kotlin的對象真是強大!有一點大家注意一下,AppInfo是在第一次被訪問到時延遲初始化的,也就是說在物件聲明時AppInfo並沒有初始化。
五、總結
以上是詳解Kotlin中如何實作類似Java或C#中的靜態方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!