Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save meganetaaan/b6831cd11ce9db96cb87 to your computer and use it in GitHub Desktop.
Save meganetaaan/b6831cd11ce9db96cb87 to your computer and use it in GitHub Desktop.

項目31_序数の代わりにインスタンスフィールドを使用する.md

序数

enumは単一のint値と関連付けられる(ordinalメソッドで取得できる)

public enum Ensemble{
  SOLO, DUET, TRIO, QUARTET, QUINTET,
  SEXTET, SEPTET, OCTET, NONET, DECTET;
  public int numberOfMusicians() { return ordinal() + 1; }
}

これは保守に関しては__✝悪夢✝__

  • 定数が並び替えられたら機能しない
  • 使用済みのint値に関連するenum定数を追加できない
  • 任意のint値に対応する定数を追加できない ** 上の例にtriple quartetを追加したいと思ったら…?

代わりに

インスタンスフィールドを使うこと。

public enum Ensemble{
  SOLO(1), DUET(2), TRIO(3), QUARTET(4),
  TRIPLE_QUARTET(12);
  
  private final int numberOfMusicians;
  Ensemble(int size) { this.numberOfMusicians = size; }
  public int numberOfMusicians() { return numberOfMusicians; }
}

ordinalは普通使わない。 EnumSetとかEnumMapなどの汎用のenumに基づくデータ構造が使う。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment