Static initialisation block in Kotlin
Solution 1
From some point of view, companion object
s 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
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
Comments
-
Marcin Koziński about 3 years
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. -
voddan about 8 yearscompanion object is an overkill here
-
hotkey about 8 years@voddan, OP asked about executing code before the first usage of an existing class. Solution with
object
declaration requires one to actually use it somewhere because of lazy initialization. -
Marcin Koziński almost 8 years@voddan Would you care to explain why it's an overkill and what would are the alternatives?
-
voddan almost 8 yearsSorry, my bad, I was mistaken to think you didn't cared about the class loading. The companion object is the right solution here
-
Derick Daniel almost 6 yearsADD SOME EXPLANATION TO YOUR CODE
-
abhilasha Yadav almost 6 years@DerickDaniel please check now.
-
mipa over 3 yearsIf static initialization is all you want to achieve, then the companion object should probably be made private or protected.