Kotlin嵌套对象类

时间:2016-01-22 20:45:44

标签: database singleton kotlin

好的,所以我现在开始学习kotlin一周了,我喜欢这种语言:p 除了扩展函数的实用性之外,我觉得他们缺乏创建像java实用程序类(xxxUtil)这样的命名空间的正确方法。

我最近开始使用这种方法,我不确定是否正确,我希望Kotlin有经验的用户提供一些反馈。

这是一个有效和正确的事情:

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值更新为Realm数据库时,我会执行以下操作:

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

这是常见的事吗?有更好的方法吗?据我所知,这是单例嵌套,我不认为这有任何问题,我只是不喜欢把像DB操作这样的常见事情放在需要实例化的类中。在旧的java中,我选择了静态类

2 个答案:

答案 0 :(得分:7)

官方推荐的在Kotlin中创建命名空间的方法是将不需要的属性和函数放在文件顶层的类中,并使用package语句创建命名空间层次结构。我们看到在Java中创建实用程序类的做法是解决语言缺陷的一种解决方法,而不是在其他语言中遵循的良好实践。

在您的示例中,我将所有代码放在顶级函数和属性中。

答案 1 :(得分:0)

我不知道其他代码,但我知道您不必在.invoke ()上致电code。调用方法总是可以缩短为直接调用,在本例中为code ()