2010-02-23 4 views
4

내 열거 형에 toString()을 다시 지정하고 싶습니다. Color. 그러나 Color 열거 형 안에 Color의 인스턴스 값을 가져 오는 방법을 알아낼 수 없습니다. Java에서이 작업을 수행 할 수있는 방법이 있습니까?Java에서 enum 자체의 내부에서 enum 값을 얻으려면 어떻게해야합니까?

예 :

public enum Color { 
    RED, 
    GREEN, 
    BLUE, 
    ... 

    public String toString() { 
     // return "R" for RED, "G", for GREEN, etc. 
    } 
} 

답변

16
public enum Color { 
    RED("R"), 
    GREEN("G"), 
    BLUE("B"); 

    private final String str; 
    private Color(String s){ 
     str = s; 
    } 
    public String toString() { 
     return str; 
    } 
} 

Enum의 생성자를 사용할 수 있습니다. 구문을 테스트하지는 않았지만 이것이 생각입니다.

+2

'최종'및 두 개의 '비공개'를 추가하는 것이 좋습니다. 오, 세미콜론. –

+0

감사합니다. Tom, 나는 적절하게 편집했습니다. –

+0

어리석은 질문 일지라도 내 질문에 용서해주십시오. 그러나 toString 메소드보다 먼저 "@Override"를 사용하면 안됩니까? –

0

자바는, 당신은 단지 당신이 이름과 다른 무언가를 원하는 경우 toString()를 오버라이드 (override) 할 필요가로 .toString()에서 .name을()를 반환, 기본적으로 당신을 위해이 작업을 수행 . 흥미로운 방법은 .name()과 .ordinal() 및 .valueOf()입니다.

당신이 대신 수행 할 수 있습니다 무엇

.toString(this.name().substring(1)); 

대신의 getAbbreviation() 사용을 추가, 속성라는 약어를 추가하고 생성자에 추가하다 할 것입니다 원하는 일을합니다. toString()

+0

또는 열거 이름의 첫 번째 문자가없는 곳의 경우에 대한 번들에서 표시하는 문자열을 찾아 로케일 응용 프로그램이 실행 중입니다. – vickirk

+0

코드 로케일을 인식하고 국제화 할 수있게하는 것이 좋습니다. –

4

Enum.name() - 누가 그걸 씹었습니까?

그러나 대부분의 경우 생성자에 설정된 인스턴스 변수에 추가 정보를 유지하는 것이 좋습니다.

2

사용 superString.substring()는 :

public enum Color { 
RED{ 
public String toString() { 
    return "this is red"; 
} 
}, 
GREEN{ 
public String toString() { 
    return "this is green"; 
} 
}, 
... 

}

이 조금 도움이되기를 바랍니다 :

public enum Color 
{ 
    RED, 
    GREEN, 
    BLUE; 

    public String toString() 
    { 
     return "The color is " + super.toString().substring(0, 1); 
    } 
} 
+0

여기서 super.toString()은 실제로 Michael Borgwardt가 자신의 대답에서 언급 한 name() 메서드를 호출하고 있습니다. – MatrixFrog

0

나는이 같은 (안 그래도 테스트)를 발견했습니다!

+0

이런 종류의 일에 대해 올바른 방향을 제시하는 Erkan H의 대답을보십시오. –

+0

오, 그래, 내가 이것을 쓴 후에 본거야;) 코멘트 주셔서 감사합니다! –

+0

@ 마이크 : 어떤 특별한 이유가 나쁜 생각입니까? 그것은 내가 실제로하고 싶은 것과 가장 가까운 것으로 보인다. 나는이 열거 형을 사용하는 코드에서 생성자를 사용할 필요가 없다. –

11

또한 예를 들어, this의 종류에 전환 할 수 있습니다, 더 나은 여전히 ​​

public enum Foo { 
    A, B, C, D 
    ; 
    @Override 
    public String toString() { 
    switch (this) { 
     case A: return "AYE"; 
     case B: return "BEE"; 
     case C: return "SEE"; 
     case D: return "DEE"; 
     default: throw new IllegalStateException(); 
    } 
    } 
} 
+0

downvotes는 이것이 아마 불가능하다고 생각하게하지만, 내가하고 싶은 일에 이상적입니다. –

+3

아니, 더 나은 방법이 있기 때문에 열거에 대한 전환을 할 수 있습니다. 아마도 Chinmay의 솔루션처럼 할 것입니다. 그것은 논평없이 투표를하는 것이 가능하다는 것은 부끄러운 일입니다. – vickirk

+0

왜 컴파일되고 작동하는지 잘 모르겠다. 사실이 질문은 enum 인스턴스의 "가치를 얻는 방법"을 묻습니다.이 대답은 다음과 같습니다. – maerics

관련 문제