【问题标题】:Kotlin Nested Object ClassesKotlin 嵌套对象类
【发布时间】:2016-01-22 20:45:43
【问题描述】:

好的,我已经开始学习 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 值更新到领域数据库时,我都会执行以下操作:

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

这是常见的事情吗?有更好的方法吗?据我了解,这是单例嵌套,我认为这没有任何问题,我只是不喜欢将数据库操作之类的常见事物放在需要实例化的类中。在旧的 Java 中,我选择了静态类

【问题讨论】:

    标签: database singleton kotlin


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 没错。除非你正在处理一个空函数,在这种情况下你必须使用 xxx?.invoke()
      猜你喜欢
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 2022-01-22
      相关资源
      最近更新 更多