Enum에 저장된 값을 문자열 리터럴로 사용하는 가장 좋은 방법은 무엇입니까? 예를 들면 다음과 같습니다.
public enum Modes {
some-really-long-string,
mode1,
mode2,
mode3
}
그런 다음 나중에 Mode.mode1
문자열 표현을로 반환 하는 데 사용할 수 있습니다 mode1
. 계속 전화하지 않아도됩니다 Mode.mode1.toString()
.
답변
당신은 할 수 없습니다. 네 가지 옵션이 여기 있다고 생각합니다. 네 가지 모두 솔루션을 제공하지만 약간 다른 접근 방식을 제공합니다 …
옵션 1 : 내장형 name()
열거 형을 사용하십시오. 특별한 명명 형식이 필요하지 않은 경우에는 완벽하게 사용할 수 있습니다.
String name = Modes.mode1.name(); // Returns the name of this enum constant, exactly as declared in its enum declaration.
옵션 2 : 더 많은 제어를 원하면 열거 속성에 재정의 속성 추가
public enum Modes {
mode1 ("Fancy Mode 1"),
mode2 ("Fancy Mode 2"),
mode3 ("Fancy Mode 3");
private final String name;
private Modes(String s) {
name = s;
}
public boolean equalsName(String otherName) {
// (otherName == null) check is not needed because name.equals(null) returns false
return name.equals(otherName);
}
public String toString() {
return this.name;
}
}
옵션 3 : 열거 형 대신 정적 결승을 사용하십시오.
public final class Modes {
public static final String MODE_1 = "Fancy Mode 1";
public static final String MODE_2 = "Fancy Mode 2";
public static final String MODE_3 = "Fancy Mode 3";
private Modes() { }
}
옵션 4 : 인터페이스에는 모든 필드가 공개, 정적 및 최종적으로 있습니다.
public interface Modes {
String MODE_1 = "Fancy Mode 1";
String MODE_2 = "Fancy Mode 2";
String MODE_3 = "Fancy Mode 3";
}
답변
모든 열거 형에는 name () 및 valueOf (String) 메서드가 모두 있습니다. 전자는 열거 형의 문자열 이름을 반환하고 후자는 이름이 문자열 인 열거 형 값을 제공합니다. 찾고있는 것과 같은가요?
String name = Modes.mode1.name();
Modes mode = Modes.valueOf(name);
Enum 자체에는 정적 valueOf (Class, String)가 있으므로 사용할 수도 있습니다.
Modes mode = Enum.valueOf(Modes.class, name);
답변
toString()
각 열거 형 값 의 메서드를 재정의 할 수 있습니다 .
예:
public enum Country {
DE {
@Override
public String toString() {
return "Germany";
}
},
IT {
@Override
public String toString() {
return "Italy";
}
},
US {
@Override
public String toString() {
return "United States";
}
}
}
용법:
public static void main(String[] args) {
System.out.println(Country.DE); // Germany
System.out.println(Country.IT); // Italy
System.out.println(Country.US); // United States
}
답변
Benny Neugebauer가 언급했듯이 toString ()을 덮어 쓸 수 있습니다. 그러나 대신 각 열거 형 필드의 toString을 덮어 쓰면 다음과 같습니다.
public enum Country{
SPAIN("España"),
ITALY("Italia"),
PORTUGAL("Portugal");
private String value;
Country(final String value) {
this.value = value;
}
public String getValue() {
return value;
}
@Override
public String toString() {
return this.getValue();
}
}
정적 필드를 추가하여 모든 필드를 검색하고 모두 인쇄하는 등의 작업도 수행 할 수 있습니다. getValue를 호출하여 각 Enum 항목과 관련된 문자열을 가져 오기만하면됩니다.
답변
mode1.name()
또는 String.valueOf(mode1)
. 그것보다 나아지지 않아 두려워
답변
public enum Modes {
MODE1("Mode1"),
MODE2("Mode2"),
MODE3("Mode3");
private String value;
public String getValue() {
return value;
}
private Modes(String value) {
this.value = value;
}
}
열거 형에서 문자열로 값을 가져 오려는 곳에서 아래와 같이 전화를 걸 수 있습니다.
Modes.MODE1.getvalue();
“Mode1″을 문자열로 반환합니다.
답변
사용할 수는 Mode.mode1.name()
있지만 종종이 작업을 수행 할 필요는 없습니다.
Mode mode =
System.out.println("The mode is "+mode);