2012-04-07 7 views
1

私は、スキャナを使用してトークンと値のペアを読み取るフラットファイルパーサーを作成しています。読み取られるファイルにはトークン「クラス」が含まれています。このトークンは後でswitch文で使用され、(pre Java 7)のvalueOf(token)Javaイディオムを使用してenum値を生成します。 (GWTとの互換性のためにJava6を使用しています)回避策として、enumで大文字の値を使用しています。また、valueOf(token.toUpperCase())を使用しています。enum/switchステートメントで予約語を使用すると、最適な回避策が得られますか?

public enum ParseTags { 
    CODE, CLASS, INSTRUCTOR, HOURS; 
} 

// . . . 

token = scanner.next(); 
value = scanner.next(); 

switch (ParseTags.valueOf(token.toUpperCase())) { 
case CODE: 
    entry.setCode(value); 
    break; 
case CLASS: 
    entry.setClass(value); 
    break; 

これではJavaScriptにコンパイルされているので、私は、各反復に余分「のtoUpperCase()」操作を避けたいです。どのようなパフォーマンスがターゲットプラットフォーム上にあるのかはわかりません。列挙に予約語を表すためのより優雅な方法がありますか?これはString上のJava7のスイッチでうまく処理されますが、やはりJava6sdkに限定されています。

答えて

3

あなたが今やっていることは、それを行うための好ましい方法です。 toUpperCaseがボトルネックになっていると、私は非常に驚いています。私はあなたに感謝し、あなたが

ParseTags.valueOf(token.toUpperCase()).set(entry, value); 
+0

OKを行うことができます

enum ParseTags { CODE { public void set(Entry entry, String value) { entry.setCode(value); } }, ...; public abstract void set(Entry entry, String value); } 

のようなものを検討するかもしれない、と述べた

。ちょうどこれを達成するためのより優雅な方法があるかどうかを確認するためにJavaの専門家に確認してみたかったのです。 – chris

関連する問題