Kotlin嵌套对象类

joh*_*crq 2 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(...) {...}
   }
}
Run Code Online (Sandbox Code Playgroud)

因此,每当我想将一些NormalNote值更新为Realm数据库时,我会执行以下操作:

RealmDb.NormaNote.create(title.text.toString(), note.text.toString())
Run Code Online (Sandbox Code Playgroud)

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

yol*_*ole 7

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

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