Bien init
n'est pas le corps du constructeur. Il est appelé après que le principal constructeur avec le contexte de la primaire constructeur.
Comme indiqué dans la documentation Officielle:
Le principal constructeur ne peut pas contenir n'importe quel code. Code d'initialisation peut être placé dans l'initialiseur de blocs, qui sont préfixés avec l'init mot-clé:
class Customer(name: String) {
init {
logger.info("Customer initialized with value ${name}")
}
}
Notez que les paramètres de la primaire constructeur peut être utilisé dans l'initialiseur de blocs. Ils peuvent également être utilisés dans bien des initialiseurs déclarée dans le corps de la classe:
class Customer(name: String) {
val customerKey = name.toUpperCase()
}
En fait, pour la déclaration des propriétés et de l'initialisation de la première constructeur, Kotlin a une syntaxe concise:
class Person(val firstName: String, val lastName: String, var age: Int) {
// ...
}
Que par votre question, vous pouvez ajouter un constructeur à accepter un paramètre comme suit:
class Person(name: String, surname: String) {
constructor(name: String) : this(name, "") {
// constructor body
}
init {
Log.d("App", "Hello");
}
}
Mais il n'est pas bon que nous sommes inutiles en passant deuxième argument une chaîne vide. Donc, nous pouvons commander constructeur comme suit:
class Person(name: String) {
constructor(name: String, surname: String) : this(name) {
// constructor body
}
init {
Log.d("App", "Hello");
}
}
Espérons que cela aide.