Comment déclarer un constructeur secondaire en Kotlin ?
Y a-t-il de la documentation à ce sujet ?
Le code suivant ne compile pas...
class C(a : Int) {
// Constructeur secondaire
this(s : String) : this(s.length) { ... }
}
Comment déclarer un constructeur secondaire en Kotlin ?
Y a-t-il de la documentation à ce sujet ?
Le code suivant ne compile pas...
class C(a : Int) {
// Constructeur secondaire
this(s : String) : this(s.length) { ... }
}
Exemple de vue personnalisée avec plusieurs constructeurs en Android:
class ShaderBackground : View {
constructor(context: Context) : super(context) {
init()
}
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
init()
}
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
) {
init()
}
private fun init() {
// Initialisation du contenu ici
paint = Paint();
paint.strokeWidth = 10f;
paint.style = Paint.Style.FILL_AND_STROKE;
}
Vous pouvez définir plusieurs constructeurs en Kotlin avec constructor
mais vous devez ignorer le constructeur par défaut class AuthLog(_data: String)
class AuthLog {
constructor(_data: String): this(_data, -1)
constructor(_numberOfData: Int): this("From count ", _numberOfData)
private constructor(_data: String, _numberOfData: Int)
}
Pour plus de détails, voir ici
Mise à jour
Maintenant, vous pouvez définir le constructeur par défaut
class AuthLog(_data: String, _numberOfData: Int) {
constructor(_data: String): this(_data, -1) {
//TODO: Ajoutez du code ici si vous le souhaitez
}
constructor(_numberOfData: Int): this("From count", _numberOfData)
}
Je viens de voir cette question et je pense qu'il pourrait y avoir une autre technique qui semble encore meilleure que celles proposées par Andrey.
class C(a: Int) {
class object {
fun invoke(name: String) = C(name.length)
}
}
Vous pouvez écrire quelque chose comme val c:C = C(3)
ou val c:C = C("abc")
, car les méthodes invoke
fonctionnent de la même manière que les méthodes apply
en Scala.
Mise à jour
A partir de maintenant, les constructeurs secondaires font déjà partie de la spécification du langage, donc cette solution de contournement ne devrait pas être utilisée.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.