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)} } } }
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
四、物件宣告
object AppInfo{ var AppName = "Kotlin Message" var AppAuthor = "Riley Ge" fun toSimpleString() { println("AppName:$AppName,AppAuthor:$AppAuthor") } }
五、總結
以上是詳解Kotlin中如何實作類似Java或C#中的靜態方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!