Dart Multiple Constructors
Разве невозможно создать несколько конструкторов для класса в дротике?
в моем классе Player, если у меня есть этот конструктор
Player(String name, int color) {
this._color = color;
this._name = name;
}
Затем я пытаюсь добавить этот конструктор:
Player(Player another) {
this._color = another.getColor();
this._name = another.getName();
}
Я получаю следующую ошибку:
Конструктор по умолчанию уже определен.
Я не ищу обходного пути, создав один конструктор с кучей необязательных аргументов.
Есть ли хороший способ решить эту проблему?
Ответы
Ответ 1
У вас может быть только один безымянный конструктор, но вы можете иметь любое количество дополнительных именованных конструкторов
class Player {
Player(String name, int color) {
this._color = color;
this._name = name;
}
Player.fromPlayer(Player another) {
this._color = another.getColor();
this._name = another.getName();
}
}
new Player.fromPlayer(playerOne);
Этот конструктор может быть упрощен
Player(String name, int color) {
this._color = color;
this._name = name;
}
в
Player(this._name, this._color);
Именованные конструкторы также могут быть приватными, начиная имя с _
class Player {
Player._(this._name, this._color);
Player._foo();
}
Конструкторы с final
списком полей инициализатора необходимы:
class Player {
final String name;
final String color;
Player(this.name, this.color);
Player.fromPlayer(Player another) :
color = another.color,
name = another.name;
}
Ответ 2
Если ваш класс использует окончательные параметры, принятый ответ не будет работать. Это делает:
class Player {
final String name;
final String color;
Player(this.name, this.color);
Player.fromPlayer(Player another) :
color = another.color,
name = another.name;
}
Ответ 3
Если вы уже использовали конструктор с параметрами в проекте, и теперь вы выяснили, что вам нужен какой-либо конструктор по умолчанию no params, вы можете добавить пустой конструктор.
class User{
String name;
User({this.name}); //This you already had before
User.empty(); //Add this later
}
Ответ 4
Как я могу использовать этот код с окончательными параметрами?
Как я могу использовать именованный конструктор с супер-конструкторами?