1

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

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()」操作を避けたいと思います。ターゲットプラットフォームでどのようなパフォーマンスが得られるかわからない。列挙で予約語を表すためのより優雅な方法はありますか?これは、Java7のStringのスイッチでうまく処理できますが、繰り返しになりますが、私はJava6sdkに限定されています。

4

1 に答える 1

3

あなたが今していることは、それを行うための好ましい方法です。これがボトルネックだったらとてつもなくショックですtoUpperCase

そうは言っても、私は次のようなことを考えるかもしれません

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

あなたができるように

ParseTags.valueOf(token.toUpperCase()).set(entry, value);
于 2012-04-07T16:17:04.780 に答える