2012-04-07 12 views
1

我在写一个平面文件解析器,它使用扫描器读取令牌/值对。正在读取的文件包含标记“class”。该令牌稍后在switch语句中使用,并使用(pre Java 7)valueOf(令牌)Java成语来生成枚举值。 (我使用Java6与GWT兼容。)作为解决方法,我在枚举中使用了大写值,并使用了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()”在每次迭代操作;不确定目标平台上的性能。在枚举中是否有更优雅的方式来表示保留字? Java7在String上的切换可以很好地处理这个问题,但是我再次将其限制在Java6sdk中。

回答

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); 
+0

好的,谢谢。只是想与一些Java专家核对一下,看看是否有更优雅的方式来实现这一点。 – chris 2012-04-07 16:19:13

相关问题