개인 서브 클래스를 정적으로 가져올 수 있습니까?
-
20-09-2019 - |
문제
나는 수업 밖에서 노출되지 않는 개인 인 열거가 있습니다. 어쨌든 나는 그 유형의 정적 가져 오기를 할 수 있으므로 매번 열거 유형을 입력 할 필요가 없습니까? 아니면 이것을 쓰는 더 좋은 방법이 있습니까? 예시:
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:
}
}
제휴하지 않습니다 StackOverflow