我正在尝试在object
声明中声明我的android sqlite迁移。每个都扩展了接口Migration
,我想让每个人在初始化时注册自己,Migrator
对象作为一个对象,也是一个单例。不幸的是(我现在意识到这一点)kotlin对象被懒惰地初始化了,所以我的迁移必须在某个地方用来注册自己。
我可以接受不得不使用反射或注释,但如果这是一个好主意或如何遵循惯例走向那个方向则无关。
答案 0 :(得分:1)
作为一种解决方法,您可以使用全局变量从对象声明切换到对象表达式:
伊格:
val A = object {
init { println("eager") }
}
懒:
object A {
init { println("lazy") }
}
答案 1 :(得分:1)
只需将对象名称写入到您的主函数中(或您要强制初始化的任何地方)即可:
//Main.kt
fun main() {
EagerObject
//...
}
//EagerObject.kt
object EagerObject {
//...
}