(참고 : 편집 질문, 이전의 의도는 분명하지 않다)switch 문에서 열거 형 값을 정규화 할 수없는 이유는 무엇입니까?
이 코드를 고려가 :
public final class Foo
{
private enum X
{
VALUE1, VALUE2
}
public static void main(final String... args)
{
final X x = X.VALUE1;
switch (x) {
case VALUE1:
System.out.println(1);
break;
case VALUE2:
System.out.println(2);
}
}
}
이 코드는 잘 작동합니다.
그러나, 나는 대체 할 경우 :
case VALUE1: // or VALUE2
로 :
case X.VALUE1: // or X.VALUE2
다음 컴파일러는 불평 :
JLS에서이 견적 16,자바 : /path/to/Foo.java:whatever : 열거 형 스위치 사례 레이블은 열거 상수의 규정되지 않은 이름이어야합니다.
SO suggests an answer :
는(상수 인라인 필요한 이유 중 하나는 스위치 문은 각각의 경우에 상수를 필요로하고, 두 개의 이러한 상수 값은 동일 할 수 없다. 컴파일러는 컴파일 타임에 switch 문에서 중복 상수 값을 확인합니다. 클래스 파일 형식은 대문자와 소문자의 기호 연결을하지 않습니다.)
그러나 이것은 만족스럽지 않습니다. 내가 아는 한 VALUE1
과 X.VALUE1
은 완전히 동일합니다. 따옴표로 묶인 텍스트는 나에게 전혀 설명하지 않는다.
여기서 enum
값이 switch
문으로 작성되어야한다는 것을 JLS에서 정의합니까?
을 선택 자바 언어 스펙이 그렇게 말하기 때문입니다. 당신이 결핍 된 것으로 링크 된 제안 된 답변에 대해 무엇입니까? –
내가 염려하는 한 'VALUE1' 또는'X.VALUE1'은 모두 같은 상수이기 때문에; 후자를 전 대신 사용할 수없는 이유가 없습니다. – fge
나는 그것이 단순함을 의심한다 - 결국, 특정 switch 문에있는 모든 * case는 같은 유형이어야한다. 왜 당신은 여분의 융통성을 원하지만 JLS를 더 복잡하게 만들까요? –