Kotlin 嵌套对象 类
Kotlin Nested Object Classes
好的,我已经开始学习 kotlin 一周了,我喜欢 language:p
除了扩展函数的强大实用性之外,我觉得他们缺乏创建名称空间的正确方法,例如 java utility 类 (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())
这是常见的事情吗?有更好的方法吗?据我了解,这是单例嵌套,我不认为这有任何问题,我只是不喜欢将这种常见的东西放在 类 里面需要实例化。在旧 java 中,我选择静态 类
官方推荐的在 Kotlin 中创建命名空间的方法是将不需要的属性和函数放在 类 文件的顶层,并使用 package 语句创建一个命名空间层次结构。我们将在 Java 中创建实用程序 类 的做法视为该语言缺陷的解决方法,而不是其他语言应遵循的良好做法。
在您的示例中,我会将所有代码放在 top-level 函数和属性中。
我不知道其余代码,但我知道您不必在 code
上调用 .invoke ()
。 invoke 方法总是可以缩短为直接调用,在本例中为 code ()
.
好的,我已经开始学习 kotlin 一周了,我喜欢 language:p 除了扩展函数的强大实用性之外,我觉得他们缺乏创建名称空间的正确方法,例如 java utility 类 (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())
这是常见的事情吗?有更好的方法吗?据我了解,这是单例嵌套,我不认为这有任何问题,我只是不喜欢将这种常见的东西放在 类 里面需要实例化。在旧 java 中,我选择静态 类
官方推荐的在 Kotlin 中创建命名空间的方法是将不需要的属性和函数放在 类 文件的顶层,并使用 package 语句创建一个命名空间层次结构。我们将在 Java 中创建实用程序 类 的做法视为该语言缺陷的解决方法,而不是其他语言应遵循的良好做法。
在您的示例中,我会将所有代码放在 top-level 函数和属性中。
我不知道其余代码,但我知道您不必在 code
上调用 .invoke ()
。 invoke 方法总是可以缩短为直接调用,在本例中为 code ()
.