2012-04-07 13 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

相關問題