2012-04-07 4 views
1

스캐너를 사용하여 토큰/값 쌍을 읽는 플랫 파일 파서를 작성했습니다. 읽히는 파일은 토큰 "class"를 포함합니다. 토큰은 나중에 switch 문에서 사용되며 (pre Java 7) valueOf (토큰) Java 관용구를 사용하여 enum 값을 생성합니다. (GWT와의 호환성을 위해 Java6을 사용하고 있습니다.) 임시 해결책으로, 열거 형에서 대문자 값을 사용하고 있으며, 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; 

, 나는 각 반복에 작업 추가 "()를 toUpperCase"를 피하려고; 어떤 성능이 대상 플랫폼에 있는지 확실하지 않습니다. 열거 형에 예약어를 나타내는보다 우아한 방법이 있습니까? 이것은 Java7의 String 스위치에 의해 잘 처리되지만, 다시 Java6sdk에 국한됩니다.

답변

3

지금하고있는 일은 선호하는 방법입니다. toUpperCase이 병목 현상이라면 나는 놀랄 것입니다. 말했다

, 나는 그래서 당신은

ParseTags.valueOf(token.toUpperCase()).set(entry, value); 
+0

확인을 할 수

enum ParseTags { CODE { public void set(Entry entry, String value) { entry.setCode(value); } }, ...; public abstract void set(Entry entry, String value); } 

같은 것을 고려해 볼 수 있습니다, 감사합니다. 자바 전문가들과 함께 이것을 수행하는 좀 더 우아한 방법이 있는지 확인하고 싶었습니다. – chris

관련 문제