渴望在kotlin中初始化对象?

时间:2017-05-21 01:35:21

标签: android kotlin

我正在尝试在object声明中声明我的android sqlite迁移。每个都扩展了接口Migration,我想让每个人在初始化时注册自己,Migrator对象作为一个对象,也是一个单例。不幸的是(我现在意识到这一点)kotlin对象被懒惰地初始化了,所以我的迁移必须在某个地方用来注册自己。

我可以接受不得不使用反射或注释,但如果这是一个好主意或如何遵循惯例走向那个方向则无关。

2 个答案:

答案 0 :(得分:1)

作为一种解决方法,您可以使用全局变量从对象声明切换到对象表达式:

伊格:

val A = object {
    init { println("eager") }
}

懒:

object A {
    init { println("lazy") }
}

答案 1 :(得分:1)

只需将对象名称写入到您的主函数中(或您要强制初始化的任何地方)即可:

//Main.kt
fun main() {
    EagerObject
    //...
}

//EagerObject.kt
object EagerObject {
    //...
}