유형을 지정하지 않고 Java Enum을 어떻게 참조 할 수 있습니까?


83

다음과 같이 자체 열거 형을 정의하는 클래스가 있습니다.

public class Test
{
    enum MyEnum{E1, E2};

    public static void aTestMethod() {
        Test2(E1);  // << Gives "E1 cannot be resolved" in eclipse.
    }
    public Test2(MyEnum e) {}
}

MyEnum.E1을 지정하면 제대로 작동하지만 "E1"로 지정하고 싶습니다. 어떻게이 작업을 수행 할 수 있는지, 아니면 다른 파일에 정의해야이 작업을 수행 할 수 있습니까?

결론 : 가져 오기에 대한 구문을 올바르게 가져올 수 없었습니다. 여러 답변이 이것이 가능하다고 제안했기 때문에 필요한 구문을 제공하고 다른 구문을 찬성하는 것을 선택하겠습니다.

그건 그렇고, (정적 가져 오기가 작동하기 전에) 이것의 정말 이상한 부분, 열거 형을 사용하는 switch 문은 열거 형에 해당 유형이 접두사로 붙는 것을 허용하지 않았습니다. 코드가 필요했습니다. 머리를 다쳤어.


9
switch 문의 "정말 이상한"동작과 관련하여 Java는 switch 문의 모든 열거 형에서이 작업을 수행합니다. 어떤 유형을 켰는 지 알기 때문에 모든 케이스 블록에서 유형을 다시 지정하도록 할 이유가 없다고 생각합니다. download.oracle.com/javase/tutorial/java/javaOO/enum.html
StriplingWarrior 2011 년

1
나에게 주어진 것은 Enum 유형 접두사를 허용하지 않는다는 것입니다. 다른 모든 곳에 접두사는 필수 (가져 오지 않은 경우) 또는 선택 사항입니다.
Bill K

switch불일치 에 대해 동의하며 경험이 적은 Java 프로그래머가 머리를 긁적입니다.
jmarkmurphy

답변:


135

실제로 중첩 된 열거 형 의 정적 가져 오기 를 수행 할 수 있습니다 . 아래 코드는 잘 컴파일됩니다.

package mypackage;

import static mypackage.Test.MyEnum.*;

public class Test
{
    enum MyEnum{E1, E2};

    public static void aTestMethod() {
        Test2(E1);  
    }

    public static void Test2(MyEnum e) {}
}

1
나는 이것을 내 질문에 대한 해결책으로 암시했지만 실제로는 그렇게하지 않을 것입니다. 열거 형은이 하나의 파일 내에서만 사용됩니다. 이것이 자동으로 작동하지 않는다는 것이 이상하게 보입니다.
Bill K

정적 가져 오기를 사용해야하지만 자체 클래스에서 정의 할 필요는 없습니다.
Yishai

5
@Bill K, 왜 자동으로 작동해야한다고 생각합니까? 그렇다면 이것이 어떻게 작동 할 것이라고 기대하십니까? 클래스 A {enum B {X, Y}; 열거 형 C {X, Z}; }
Kevin Bourrillion 2009

3
이 솔루션은 MyEnum이 Test 외부에 표시되기 때문에 작동합니다. MyEnum이 예를 들어 개인 경우 솔루션이 작동하지 않습니다.
Chry Cheng 2013

2
"import static mypackage.Test.MyEnum. *;"의 마지막 부분 인 ". *"기호를 잊지 마십시오. 내가 한 것처럼!
joro

18

중첩 된 클래스에서 정적 가져 오기를 수행 할 수 있습니다.

import static apackage.Test.Enum.*;

7

테스트 클래스는 가져올 수 있도록 패키지에 정의되어야합니다.

패키지 정의 Test( IT WORKS ) :

package mypackage;

당신이 사용할 수있는:

import static mypackage.Test.MyEnum.*;

패키지가 정의되어 있지 않으면 사용할 수 없습니다 ( 작동하지 않음 ) :

import static Test.MyEnum.*;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.