2012-11-10 2 views
1

프로젝트 작업 중에 저장소에이 유형의 코드가 있음을 발견했습니다. 저 저장소는 잘 작동하지만 독립적 인 테스트 실행을 통해 코드를 이해하려고 할 때 오류가 발생합니다 !!!자바에서 Enum 유형의 객체를 만들 수 있습니까?

public enum Fruits { 
    static { 
     APPLE= new Fruits("APPLE", 0); 
     BANANA = new Fruits("BANANA", 1); 
     // and so on. 
    } 
} 

나는, 열거 안에 열거의 생성자를 호출의 의미를 이해 할 수없는 나는 너무 생성자를 선언하지 않고.

+0

정교하게 작성하고 오류를 게시하십시오. – Frank

+0

적어도 컴파일하기에 충분한 포스트 코드. –

답변

6

제 생각 엔 이건 입니다. 실제로 실제 코드를 디 컴파일하는 제품입니다. 이 유효한 Java 소스 코드가 아니라 컴파일러의 열거와 함께 당신을 위해 만들 것입니다 무엇을 효율적입니다 : 당신이 더 많은 매개 변수를 추가하고자 할 때

public enum Fruits { 
    APPLE, BANANA; 
} 
+0

궁금한 점이 있다면, 디 컴파일 된 코드에도 생성자 선언이 있어야합니다. –

+0

@MarkoTopolnik : 예, 그렇습니다. OP가이 코드를 얻은 곳이 어디인지, 더 많은 정보가 있는지 여부는 분명하지 않습니다. –

+0

당신은 그것을 매우 정확하게 취했습니다 ... 코드가 디 컴파일되었습니다. 저장소를 디 컴파일했습니다 ... 감사합니다 ... :) – sid15g

-1
public enum Fruits { 
     APPLE("APPLE", 0), BANANA("BANANA", 1); 
     String text; 
     int value; 
     private Fruits(String text, int value){ 
      this.text = text; 
      this.value = value; 
     } 
     public String getText(){ 
      return text; 
     } 
     public int getValue(){ 
      return value; 
     } 
    } 

이 개념은 유용합니다.

+1

사실은 암시 적 열거 형 멤버 생성자에 대한 암시적인 인수입니다. 그들은 * name * 및 * ordinal * 속성을 설정합니다. –

+1

그래,이 속성들은 모두 모든 열거 형에서 자동으로 사용할 수 있습니다. 그것들을 생성자에 포함시키는 것은 시간 낭비 일 것입니다. –

+0

동의하지만 생성자 및 값 검색의 개념을 이해하는 데 도움이됩니다. OP가 생성자에 더 많은 매개 변수를 추가하려는 경우 매우 유용합니다. –

4

평상시처럼 @ JonSkeets의 직감이 승리합니다.

public enum Fruits { 
    APPLE, BANANA; 
} 

그런 디 컴파일 jad와 수율 : 당신이 열거를 선언 할 때

public final class Fruits extends Enum 
{ 

    public static Fruits[] values() 
    { 
     return (Fruits[])$VALUES.clone(); 
    } 

    public static Fruits valueOf(String s) 
    { 
     return (Fruits)Enum.valueOf(Fruits, s); 
    } 

    private Fruits(String s, int i) 
    { 
     super(s, i); 
    } 

    public static final Fruits APPLE; 
    public static final Fruits BANANA; 
    private static final Fruits $VALUES[]; 

    static 
    { 
     APPLE = new Fruits("APPLE", 0); 
     BANANA = new Fruits("BANANA", 1); 
     $VALUES = (new Fruits[] { 
      APPLE, BANANA 
     }); 
    } 
} 

완전한 예는 컴파일러가 당신을 위해하고있는 모든 작업을 보여 그가 제공 한 코드를 컴파일. @MarkoTopolnik이 지적했듯이 컴파일러가 허용하지 않기 때문에 스스로 할 수는 없습니다.

+0

@MarkoTopolnik Good catch; 내 편집을 봐라. –

관련 문제