[java] Java : 서브 클래스에서 enum과 함께 switch 문 사용
먼저 C #의 열거 형에 훨씬 익숙하며 Java의 열거 형이 상당히 엉망인 것처럼 보입니다.
보시다시피, 다음 예제에서 switch 문 @ enums를 사용하려고하지만 내가하는 일에 관계없이 항상 오류가 발생합니다.
내가받는 오류는 다음과 같습니다
규정 된 케이스 레이블
SomeClass.AnotherClass.MyEnum.VALUE_A
은 규정되지 않은 열거 상수로 교체되어야합니다.VALUE_A
문제는 오류를 상당히 이해하지만 열거 형이 다른 하위 클래스에 있기 때문에 VALUE_A 만 쓸 수는 없습니다. 이 문제를 해결할 방법이 있습니까? 그리고 왜 Java에서 발생합니까?
//Main Class
public class SomeClass {
//Sub-Class
public static class AnotherClass {
public enum MyEnum {
VALUE_A, VALUE_B
}
public MyEnum myEnum;
}
public void someMethod() {
MyEnum enumExample //...
switch (enumExample) {
case AnotherClass.MyEnum.VALUE_A: { <-- error on this line
//..
break;
}
}
}
}
답변
이것을 다음과 같이 변경하십시오.
switch (enumExample) {
case VALUE_A: {
//..
break;
}
}
실마리가 잘못되었습니다. case
열거 형 유형으로 레이블 을 한정 할 필요가 없으며 그 값만 있습니다.
답변
Java는의 요소 유형을 자동으로 유추 case
하므로 레이블을 규정하지 않아야합니다.
int i;
switch(i) {
case 5: // <- integer is expected
}
MyEnum e;
switch (e) {
case VALUE_A: // <- an element of the enumeration is expected
}
답변
이것은해야합니다 :
//Main Class
public class SomeClass {
//Sub-Class
public static class AnotherClass {
public enum MyEnum {
VALUE_A, VALUE_B
}
public MyEnum myEnum;
}
public void someMethod() {
AnotherClass.MyEnum enumExample = AnotherClass.MyEnum.VALUE_A; //...
switch (enumExample) {
case VALUE_A: { //<-- error on this line
//..
break;
}
}
}
}
답변
잘못된:
case AnotherClass.MyEnum.VALUE_A
권리:
case VALUE_A:
답변
이것이 내가 사용하는 방법입니다. 그리고 그것은 환상적으로 일하고 있습니다-
public enum Button {
REPORT_ISSUES(0),
CANCEL_ORDER(1),
RETURN_ORDER(2);
private int value;
Button(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
그리고 switch-case
아래와 같이
@Override
public void onClick(MyOrderDetailDelgate.Button button, int position) {
switch (button) {
case REPORT_ISSUES: {
break;
}
case CANCEL_ORDER: {
break;
}
case RETURN_ORDER: {
break;
}
}
}
답변
someMethod()
이런 식으로 작성 하십시오 :
public void someMethod() {
SomeClass.AnotherClass.MyEnum enumExample = SomeClass.AnotherClass.MyEnum.VALUE_A;
switch (enumExample) {
case VALUE_A:
break;
}
}
switch 문에서는 상수 이름 만 사용해야합니다.