渴望在 kotlin 中初始化对象?

Cat*_*yst 6 android kotlin

我正在尝试在声明中声明我的 android sqlite 迁移object。每个都扩展了 interface Migration,我想让每个人在初始化时注册自己,Migrator对象是一个对象,也是一个单例。不幸的是(我很晚才意识到)kotlin 对象被延迟初始化,所以我的迁移必须在某处使用来注册自己。

我可以接受必须使用反射或注释,但不知道这是否是一个好主意或如何遵循惯例朝着这个方向发展。

vod*_*dan 1

作为解决方法,您可以从对象声明切换到带有全局变量的对象表达式:

渴望的:

val A = object {
    init { println("eager") }
}
Run Code Online (Sandbox Code Playgroud)

懒惰的:

object A {
    init { println("lazy") }
}
Run Code Online (Sandbox Code Playgroud)

  • 这也不会起作用:具有顶级声明的文件被转换为“FileNameKt”类,这些类(如 JVM 中的通常情况)被延迟初始化。 (3认同)