In the Kotlin language we, by default, have to initialize each variable when it is introduced. To avoid this, the lateinit
keyword can be used. Referring to a lateinit
variable before it has been initialized results in a runtime exception.
lateinit
can not, however, be used with the primitive types. Why is it so?
For (non-nullable) object types, Kotlin uses the null
value to mark that a lateinit
property has not been initialized and to throw the appropriate exception when the property is accessed.
For primitive types, there is no such value, so there is no way to mark a property as non-initialized and to provide the diagnostics that lateinit
needs to provide. (We could try to use a separate marker of some kind, but that marker would not be updated when initializing the field through reflection, which is a major use case of lateinit
).
Therefore, lateinit
is supported for properties of object types only.