2016-01-22 132 views
1

好的,我現在已經開始學習kotlin一個星期了,我喜歡這種語言:p 除了擴展功能的強大功能外,我覺得他們缺乏創建名稱空間的正確方法java實用程序類(xxxUtil)。Kotlin嵌套對象類

我最近開始使用這個aproach,我不知道是否是正確的,我想從Kotlin有經驗的用戶那裏得到一些反饋。

這是一個有效的和適當的事TODO:

object RealmDb { 

    private val realmInstance by lazy{ Realm.getInstance(MainApplication.instance) } 

    private fun wrapInTransaction(code:() -> Unit){ 
     realmInstance.beginTransaction(); 
     code.invoke() 
     realmInstance.commitTransaction(); 
} 
    object NormaNote{ 
     fun create(...) {...} 
     fun update(...) {...} 
    } 
} 

所以,每當我想更新一些NormalNote值到領域的數據庫,我做到以下幾點:

RealmDb.NormaNote.create(title.text.toString(), note.text.toString()) 

這是一個常見的事情呢?有更好的方法嗎?據我瞭解,這是單身嵌套,我不認爲這有什麼問題,我只是不喜歡把這些常見的東西,如需要實例化類中的數據庫操作。在舊的Java我選擇靜態類

回答

6

在Kotlin中正式推薦的創建名稱空間的方法是將屬性和函數不需要放在文件頂層的類中,並使用包語句創建一個名稱空間層次結構。我們看到在Java中創建實用程序類的做法是解決語言缺陷的一種解決方法,而不是其他語言中遵循的良好實踐。

在你的例子中,我會把所有的代碼放在頂層函數和屬性中。

0

我不知道其餘的代碼,但我知道你不必在code上致電.invoke()。調用方法總是可以縮短爲直接調用,在這種情況下,調用方法是code()

+1

沒錯。除非你正在處理一個空函數,在這種情況下,你必須使用xxx?.invoke() –