我正在编写一个平面文件解析器,它使用扫描仪读取令牌/值对。正在读取的文件包含令牌“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。
答案 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);