在枚举/ switch语句中使用保留字,最好的解决方法?

时间:2012-04-07 16:15:57

标签: java

我正在编写一个平面文件解析器,它使用扫描仪读取令牌/值对。正在读取的文件包含令牌“class”。该令牌稍后在switch语句中使用,并使用(pre Java 7)valueOf(token)Java惯用法来生成枚举值。 (我使用Java6与GWT兼容。)作为一种解决方法,我在枚举中使用大写值,并使用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。

1 个答案:

答案 0 :(得分: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);