Static initialisation block in Kotlin

JavaStaticKotlinInitializer

Java Problem Overview


What is the equivalent of a static initialisation block in Kotlin?

I understand that Kotlin is designed to not have static things. I am looking for something with equivalent semantics - code is run once when the class is first loaded.

My specific use case is that I want to enable the DayNight feature from Android AppCompat library and the instructions say to put some code in static initialisation block of Application class.

Java Solutions


Solution 1 - Java

From some point of view, companion objects in Kotlin are equivalent to static parts of Java classes. Particularly, they are initialized before class' first usage, and this lets you use their init blocks as a replacement for Java static initializers:

class C {
    companion object {
        init {
            //here goes static initializer code
        }
    }
}

@voddan it's not an overkill, actually this is what suggested on the site of Kotlin: "A companion object is initialized when the corresponding class is loaded (resolved), matching the semantics of a Java static initializer." Semantic difference between object expressions and declarations

Solution 2 - Java

companion object  { 
    // Example for a static variable
    internal var REQUEST_CODE: Int? = 500
 
    // Example for a static method
    fun callToCheck(value: String): String {
        // your code
    }
}

An object declaration inside a class can be marked with the companion keyword.And under this we can use like java static method and variable.LIke classname.methodname or classname.variablename

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMarcin KozińskiView Question on Stackoverflow
Solution 1 - JavahotkeyView Answer on Stackoverflow
Solution 2 - Javaabhilasha YadavView Answer on Stackoverflow