Java 5.0の新機能のひとつ、列挙型を初めて使ってみた。これまでは整数の定数値であれこれ判別していたのを、列挙型に置き換える。
Javaの列挙型は、単に自動で設定される整数の定数じゃなくて、オブジェクトになっている。もちろん宣言してある順にもとづいて整数化もできる。宣言してある文字列にも変換できるし、文字列から取得することもできる。さらに、クラスとしてメソッドも定義できる。
たとえば、次のように書ける。OSの種類を例にしてみた。
public enum OsType { MAC, UNIX, WINDOWS; public boolean isUnix() { return (this == UNIX || this == MAC); } } public static void main(String[] args) { String name = OsType.MAC.toString(); // => "MAC" OsType type1 = OsType.valueOf("WINDOWS"); // => OsType.WINDOWS int intValue = OsType.WINDOWS.ordinal(); // => 2 OsType type2 = OsType.values()[0]; // => OsType.MAC; Enum type3 = Enum.valueOf(OsType.class, "UNIX"); // => OsType.UNIX boolean isUnix = type1.isUnix(); // => false }
オブジェクト指向プログラミングでは「誰にこの仕事をやらせるか?」を割当てるのがポイントになる。整数の定数は仕事をしてくれないから、その値にまつわる仕事を周りがしなくちゃいけなくって、あちこちに条件判定の羅列ができちゃったりする。Javaの列挙型はそれ自身が仕事をしてくれるから、あれやこれやの雑務をキレイに割当てられてスッキリ。