1. ホーム
  2. dart

[解決済み] Dart マルチプルコンストラクタ

2022-09-14 04:21:09

質問

dartでは、1つのクラスに対して複数のコンストラクタを作成することはできないのでしょうか?

私のプレイヤークラスで、次のコンストラクタがあった場合

Player(String name, int color) {
    this._color = color;
    this._name = name;
}

次に、このコンストラクタを追加してみます。

Player(Player another) {
    this._color = another.getColor();
    this._name = another.getName();
}

以下のようなエラーが出ます。

デフォルトのコンストラクタは既に定義されています。

私は、必要でない引数をたくさん持つ1つのコンストラクタを作成することによる回避策を探しているわけではありません。

これを解決する良い方法はありますか?

どのように解決するのですか?

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;
}