An initializer block adds setup logic to a Kotlin class when the primary constructor’s compact syntax cannot contain that code. It is written with init inside the class body and works alongside primary-constructor parameters and properties. section 4.2 section 4.2.1
class User constructor(_nickname: String) { #1
val nickname: String
init { #2
nickname = _nickname
}
}
This explicit form stores the constructor argument in a property during object creation: the constructor declaration introduces the parameter, while init performs the assignment. section 4.2.1
The syntax supports several related initialization choices:
- Refer to primary-constructor parameters from property initializers or initializer blocks. section 4.2.1
- Declare several initializer blocks when a class needs multiple pieces of initialization code. section 4.2.1
- Replace simple initializer assignment with a property parameter such as val nickname: String when no extra logic is needed. section 4.2.1
Use init for initialization work that belongs to class creation but does not fit directly in the primary constructor. Secondary constructors provide another initialization option when constructor flexibility is required. section 4.6 section 4.2.1
