我有一个singleton类,我用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
    }

}

现在的问题是我不能使用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)

and i think it's because instance is class variable and not instance variable so i can't reference it with this keyword :/

另外,我无法判断它是否为NULL,因为它抛出UninitializedPropertyAccessException:

lateinit property instance has not been initialized

推荐答案

Unfortunately this is a known issue, tracked here on the official Kotlin issue tracker.

Kotlin相关问答推荐

捕捉异常是Kotlin协程中的反模式吗?

在 Kotlin 中实现并输入 Either

在 kotlin 中使具体化字段可选

Kotlin .如何用从 1 到 90 的 5 个唯一数字填充列表中的每一行?

MyType.()在 Kotlin 中是什么意思?

如何从 var list 或可变列表中获取列表流

Kotlin 条件格式字符串

我什么时候可以在 LazyList 或 Column 的范围内使用 Composable?

Moshi:解析单个对象或对象列表(kotlin)

为什么我在使用 Jetpack Compose clickable-Modifier 时收到后端内部错误:Exception during IR lowering error?

Kotlin Compose,在行中对齐元素

从代码块执行和返回(在 Elvis 运算符之后)

如何使用kotlin中的反射查找包中的所有类

使用范围的稀疏sparse值列表

TypeConverter()在Android的TypeConverter错误中具有私有访问权限

如何在使用Koin DI的活动之间共享同一个ViewModel实例?

Kotlin 与 C# 中的标志枚举变量具有相似效果的方式是什么

我应该在哪里调用 MobileAds.initialize()?

函数引用和lambdas

使用 Kotlin 按字母对数组进行排序