Java入門:Enum型
かなり前に追加されたJavaのEnum型。1回勉強したのだが、すっかり忘れてしまった。なぜか覚えられない。。もう一度 再勉強である。
シンプルなEnum型
Enum型を定義するだけなら、列挙子を定義するだけ。swtch文でも比較できる。
Sample/Main.java at master · eiKatou/Sample
enum Status {
SUCCESS, ERROR
}
Status status = Status.SUCCESS;
switch (status) {
case SUCCESS:
System.out.println("SUCCESS");
break;
case ERROR:
System.out.println("ERROR");
break;
default:
break;
}
Enum型に値を持たせる
ここから先が曖昧な知識となっていたところ。
enumの中に好きな値を持たせることができる。コンストラクタはprivateで定義する。また、自身で定義したメソッドでコードを取得できる。
サンプルコードはこんな感じ。
enum Status2 {
SUCCESS(0), ERROR(1);
private final int code;
private Status2(int code) {
this.code = code;
}
public int getCode() {
return this.code;
}
}
Status2 status2 = Status2.ERROR;
System.out.println("name:" + status2.name());
System.out.println("code:" + status2.getCode());
System.out.println("toString:" + status2.toString());
switch (status2) {
case SUCCESS:
System.out.println("SUCCESS");
break;
case ERROR:
System.out.println("ERROR");
break;
default:
break;
}
実行結果
name:ERROR
code:1
toString:ERROR
ERROR
Enum型のメソッド実装
Enum型の列挙子にメソッドを実装できる。
enum Status3 {
SUCCESS(0) {
@Override
public String getPrintCode() {
return "<p class='ok'>" + getCode() + "</p>";
}
}, ERROR(1) {
@Override
public String getPrintCode() {
return "<p class='error'>" + getCode() + "</p>";
}
};
abstract public String getPrintCode();
// その他コードは省略
}
Enum型に値を持たせるのは良い
Enum型に値を持たせることに違和感があったけど、よく考えると良いアイデアだと思う。定数を型として扱えるわけで、良いことしか思いつかない。
複数の値を持たせることができるのだが、3個以上の値を持たせるのはやりすぎだと思う。1つの列挙型に3つも値を持つことなんてあるだろうか。せいぜい2つもあればいいところじゃないかな。同様にメソッドを複数持たせることもやりすぎな気がしている。それならクラスを使えよ、って思う。
投稿日 2017年10月22日