Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

isInitialized property for lateinit isn't working in companion object

I have a singleton class which i have implemented it in java fashion :

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
    }

}

now the problem is i can't use isInitialized property because it throws NoSuchFieldError exception :

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 :/

also i can't check if it's null because it throws UninitializedPropertyAccessException :

lateinit property instance has not been initialized
like image 226
Mahdi Nouri Avatar asked Jun 24 '18 07:06

Mahdi Nouri


People also ask

How do I know if Lateinit property is initialized?

You can check if the lateinit variable has been initialized or not before using it with the help of isInitialized() method. This method will return true if the lateinit property has been initialized otherwise it will return false.

Can we use Lateinit with Val?

You cannot use val for lateinit variable as it will be initialized later on.

How do I declare Lateinit?

In order to create a "lateInit" variable, we just need to add the keyword "lateInit" as an access modifier of that variable. Following are a set of conditions that need to be followed in order to use "lateInit" in Kotlin. Use "lateInit" with a mutable variable.


1 Answers

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

like image 124
zsmb13 Avatar answered Oct 11 '22 14:10

zsmb13