enumのtoString()
JDK 5.0のenum。そのまま出力すると、定義名がそのまま出力されるんですが、
この振る舞いを変更できないのが気持ち悪い。
public class EnumSample { public static enum TYPE {A, B, C}; public static void main(String[] args) { System.out.println(TYPE.A); } }
上記プログラムは「A」と出力するが、これを変えるためには、
TYPEの中で、toString()をオーバーライドしてあげないといけない。
例えば、
public String toString() { return super.toString().toLowerCase(); }
というメソッドをTYPEに追加すれば出力結果は「a」になる。
ここまでは、まぁいいんだけど、こうしてしまうと、
自動的に作成される、valueOfが正しく動かなくなる。
TYPE.valueOf(TYPE.A.toString())==TYPE.A
が成立しないどころか例外が発生しやがるんだよね、これが。
Java 5.0 Tiger (開発者ノートシリーズ)
によれば。。。
toString()の振る舞いを変更する場合、valueOf()の振舞いも変更する必要がある。
これらの2つのメソッドは常にペアの鏡像になる。
うん、そうだろうなぁ。わかるよ。
言いたいことは非常によくわかる。
でもね、、、
The enum EnumSample.TYPE already defines the method valueOf(String) implicitly
変更できないんだなこれがorz
シンメトリー性がないのがいやなので、enumで定義名以外の情報を
返す場合は、別途メソッドを作ってやってます。
不便だ。
mustangでなんとかしてくれると嬉しいのぉ。