Javaのenum
昨日始めたJavaで、とりあえずなんか書いて見ているが,なかなかJavaスゲーっていうのが,みつかんなくてすこし飽きていたんだけど,enumがすごかった。笑
そもそも、Jythonの中に,以下のようなコードを発見。
public enum Type { CLASS, INSTANCE, FUNCTION, MODULE, GLOBAL, SCOPE }
あー、enumはあるし、Cとかわらんのね。なんておもいながら実装してみる。適当に以下のような物を。
public enum TokenType { SYMBOL, NUMBER, WHITESPACE };
さて、このTokenTypeをどっかのクラスに持たせて、んで、デバッグ用にtoStringなんかを実装したい。
//こうしたい。 class Token { TokenType type; public String getTokenTypeStr() { static final String[] typestrs = {"Symbol", "Number", "WhiteSpace"}; return typestrs[(int)type]; } }
しかし、ここでなんと,enum --> intができないことが判明。orz
いろいろ調べていると,Javaのenumはもはやデータ宣言に特化した記法だなと思った。
各値の宣言は,コンストラクタ.そして,メソッドを持たせることもできる.
最終的に以下のようにできた.
public enum TokenType{ SYMBOL ("Symbol"), NUMBER ("Number"), WHITESPACE ("WhiteSpace"); private final String typestr; private TokenType(String typestr) {this.typestr = typestr;} public String toString() { return typestr; } };
これで,TokenType.toString()で文字をとってこれる♪
あたらしい言語(?)に触れて楽しいのはこういうときだよなぁ〜。なんて。
あと、今日の疑問符は配列とCollectionの違いだが,なんとなくしかわかってないのでまた今度。
もうひとつ,finalの神話という話を読んでいる.
http://www.ibm.com/developerworks/jp/java/library/j-jtp1029/