lateinit的isInitialized属性在随播对象中不起作用

Mah*_*uri 9 singleton android kotlin

我有一个单例类,我已经用java方式实现了它:

companion object {

    @Volatile private lateinit var instance: TrapBridge

    fun bridge(): TrapBridge {
        if (!this::instance.isInitialized) {
            synchronized(this) {
                if (!this::instance.isInitialized) {
                    instance = TrapBridge()
                }
            }
        }
        return instance
    }

}
Run Code Online (Sandbox Code Playgroud)

现在问题是我不能使用isInitialized属性,因为它抛出NoSuchFieldError异常:

java.lang.NoSuchFieldError: No field instance of type Lcom/sample/trap/model/TrapBridge; in class Lcom/sample/trap/model/TrapBridge$Companion; or its superclasses (declaration of 'com.sample.trap.model.TrapBridge$Companion' appears in /data/app/com.sample.trapsample-L9D8b2vxEQfiSg9Qep_eNw==/base.apk)
Run Code Online (Sandbox Code Playgroud)

我认为这是因为instance是类变量而不是实例变量所以我不能用this关键字引用它:/

我也无法检查它是否为null因为它抛出UninitializedPropertyAccessException:

lateinit property instance has not been initialized
Run Code Online (Sandbox Code Playgroud)

zsm*_*b13 8

不幸的是,这是一个已知的问题,跟踪在这里官方科特林问题跟踪.