1

我正在编写一个使用扫描仪读取令牌/值对的平面文件解析器。正在读取的文件包含令牌“类”。令牌稍后在 switch 语句中使用,并使用(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。

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 回答