Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android lateinit的isInitialized属性Is';t在伴生物体中工作_Android_Kotlin_Singleton - Fatal编程技术网

Android lateinit的isInitialized属性Is';t在伴生物体中工作

Android lateinit的isInitialized属性Is';t在伴生物体中工作,android,kotlin,singleton,Android,Kotlin,Singleton,我有一个以java方式实现的单例类: companion object { @Volatile private lateinit var instance: TrapBridge fun bridge(): TrapBridge { if (!this::instance.isInitialized) { synchronized(this) { if (!this::instance.isInitial

我有一个以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)
我认为这是因为
instance
是类变量而不是实例变量,所以我不能用
这个
关键字来引用它:/

此外,我无法检查它是否为null,因为它引发了
未初始化的PropertyAccessException

lateinit property instance has not been initialized

不幸的是,这是一个已知的问题,在官方的Kotlin问题跟踪程序上进行了跟踪。

我也遇到了同样的问题,并找到了另一种解决方法:

@Volatile
private lateinit var box: BoxStore
class BoxKeeper private constructor() {
    companion object {
        var instance: BoxStore
            get() = box
            set(_) {}

        fun init(context: Context) {
            if (::box.isInitialized.not())
                box = MyObjectBox.builder().androidContext(context).build()
        }

    }
}

我认为当前的解决方法是使用单独的
布尔值
变量或可为空的数据类型,对吗?是的@Maxim您可以使用可为空的类型并在Jetbrains tracker上对该问题进行表决。这似乎只会影响同伴对象。在kotlin multiplatform中的一个非同伴对象在公共部分也有同样的问题
private lateinit var myList:List
其中
::myList.isInitialized
被忽略,但
::myList.IsaStract
起作用