「項目 30 int定数の代わりに enum を使用する」にて紹介されている、
"enum型にデータと振る舞いを持たせる"コードを真似して書いてみた。
// 面積の単位ごとのデータ、メソッドを定義 private enum Unit { HEIBEI ("㎡"){ String getArea(double area) { return area + this.toString(); } }, TSUBO ("坪"){ String getArea(double area) { return area * 0.3025 + this.toString(); } }; private final String unitName; // コンストラクタ Unit(String unitName) { this.unitName = unitName; } // すべての定数にオーバーライドを強制する abstract String getArea(double area); // カスタム文字列表現 @Override public String toString() { return unitName; } // 一意の文字列表現から定数を取得できるようMap化しておく private static final MapstringToEnum = new HashMap<>(); static { for (Unit unit : values()) stringToEnum.put(unit.toString(), unit); } // 一意の文字列表現から定数を取得する(toStringと対) public Unit fromString(String unitName) { return stringToEnum.get(unitName); } }
// 定義したenumを利用する public static void main(String[] args) { double area = 320.25; System.out.println(Unit.HEIBEI.getArea(area)); System.out.println(Unit.TSUBO.getArea(area)); }実行結果
320.25㎡
96.875625坪
これまでenum型については、
バッドプラクティスとして知られる"int enumパターン"(下記)の代用として定数を列挙する、ぐらいにしか使ったことがなかった。。
// No More int enum pattern!! public static final int HEIBEI = 1; public static final int TSUBO = 2;
0 件のコメント:
コメントを投稿