4 votes

Comment appeler super() avec des arguments complexes dans Dart ?

D'après ce que j'ai appris, en Dart, vous devez appeler super en dehors du corps de fonction du constructeur.

Supposons cette situation :

/// Unmodifiable given class
class Figure{
  final int sides;
  const Figure(this.sides);
}

/// Own class
class Shape extends Figure{
  Shape(Form form){
    if(form is Square) super(4);
    else if(form is Triangle) super(3);
  }
}

Cela entraîne des erreurs d'analyse (la superclasse n'a pas de constructeur à 0 paramètre et l'expression super(3) n'est pas une fonction, elle ne peut donc pas être invoquée). Comment pourrais-je obtenir la fonctionnalité souhaitée dans l'exemple ?

4voto

Günter Zöchbauer Points 21340

En Dart, pour appeler le super constructeur, l'option liste d'initialisation est utilisé.

class Shape extends Figure{
  Shape(Form form) : super(form is Square ? 4 : form is Triangle ? 3 : null);
}

si vous avez besoin d'exécuter des instructions, vous pouvez ajouter un constructeur d'usine qui renvoie à un constructeur régulier (privé) comme

class Shape extends Figure{

  factory Shape(Form form) {
    if (form is Square) return new Shape._(4);
    else if(form is Triangle) return new Shape._(3);
  }
  Shape._(int sides) : super(sides)
}

Prograide.com

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.

Powered by:

X