StoryEdit 開発日誌

ウェブアプリ StoryEditを作ってましたが延期。普通のブログ。

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
いろいろ調べていると,Javaenumはもはやデータ宣言に特化した記法だなと思った。
各値の宣言は,コンストラクタ.そして,メソッドを持たせることもできる.
最終的に以下のようにできた.

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/