문제

나는 수업 밖에서 노출되지 않는 개인 인 열거가 있습니다. 어쨌든 나는 그 유형의 정적 가져 오기를 할 수 있으므로 매번 열거 유형을 입력 할 필요가 없습니까? 아니면 이것을 쓰는 더 좋은 방법이 있습니까? 예시:

package kip.test;

import static kip.test.Test.MyEnum.*; //compile error

public class Test
{
  private static enum MyEnum { DOG, CAT }

  public static void main (String [] args)
  {
    MyEnum dog = MyEnum.DOG; //this works but I don't want to type "MyEnum"
    MyEnum cat = CAT; //compile error, but this is what I want to do
  }
}
도움이 되었습니까?

해결책

아니면 이것을 쓰는 더 좋은 방법이 있습니까?

주요 목표는 자격을 갖춘 열거 식별자없이 항목을 참조 하고이 목록을 개인적으로 유지하는 경우 enum 전체를 입력하고 일반적인 개인 정적 상수를 사용하십시오.

다른 팁

비 모니 디퍼 액세스 레벨 (즉)을 사용할 수 있습니다

enum MyEnum { DOG, CAT }

MyEnum 하위 클래스가 아닌 다른 패키지의 클래스에는 보이지 않습니다. 가장 가까운 형태의 사적이지만 명시 적으로 참조를 피할 수 있습니다. MyEnum.

현장에 완전히 자격을 갖춘 필드에 액세스 할 수 있다는 점을 고려하면 정적으로 가져올 수없는 컴파일러 (또는 언어 사양)의 버그라고 말합니다.

열거 패키지를 보호하는 것이 좋습니다.

일부 코드를 열거의 (정적) 방법으로 옮기는 것이 합리적 일 수 있습니다.

눌렀을 때 외부 클래스에서 정적 필드를 복제 할 수 있습니다.

private static final MyEnum CAT = MyEnum.CAT;
private static final MyEnum DOG = MyEnum.DOG;

icky, 그러나 가능성.

아니, 그건 거의 뭐야 private 모든 것입니다.

열거 자체 안에 코드를 작성할 수 있습니다.

public enum MyEnum {
DOG, CAT;
public static void main(String[] args) {
    MyEnum dog = MyEnum.DOG; // this works but I don't want to have to type
                                // MyEnum
    MyEnum cat = CAT; // compile error, but this is what I want to do
}
 }

클래스없이 개인 열거가 참조 할 수있는 다른 장소는 스위치 문에 있습니다.

private static enum MyEnum {
    DOG, CAT
}

public static void main(String[] args) {
    MyEnum e = null;
    switch (e) {
    case DOG:
    case CAT:
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top