답변:
나는 당신이 무엇을하고 싶은지 모르겠지만 이것이 실제로 예제 코드를 번역 한 방법입니다 ....
package test;
/**
* @author The Elite Gentleman
*
*/
public enum Strings {
STRING_ONE("ONE"),
STRING_TWO("TWO")
;
private final String text;
/**
* @param text
*/
Strings(final String text) {
this.text = text;
}
/* (non-Javadoc)
* @see java.lang.Enum#toString()
*/
@Override
public String toString() {
return text;
}
}
또는에 대한 getter 메소드를 작성할 수 있습니다 text
.
이제 할 수 있습니다 Strings.STRING_ONE.toString();
final
가장 좋습니다.
new
생성자 그대로 private
. 본질적으로 객체 생성은 금지되며이 final
경우 실제로 필요하지 않습니다.
setText(String)
열거 형을 사용 하는 경향이 final
있으며 컴파일러 지원을 통해 상수라는 도대체 문서를 밝힐 수 있습니다 . String
상수 를 사용 한다면로 선언하지 않을 것입니다 public static String
.
열거 형의 사용자 정의 문자열 값
에서 http://javahowto.blogspot.com/2006/10/custom-string-values-for-enum.html
java enum의 기본 문자열 값은 액면 값 또는 요소 이름입니다. 그러나 toString () 메서드를 재정 의하여 문자열 값을 사용자 지정할 수 있습니다. 예를 들어
public enum MyType {
ONE {
public String toString() {
return "this is one";
}
},
TWO {
public String toString() {
return "this is two";
}
}
}
다음 테스트 코드를 실행하면 다음이 생성됩니다.
public class EnumTest {
public static void main(String[] args) {
System.out.println(MyType.ONE);
System.out.println(MyType.TWO);
}
}
this is one
this is two
bin
EnumTest $ MyType.class EnumTest $합니다 MyType $ 1.class EnumTest $합니다 MyType $ 2.class 추가 할 것입니다 : 디렉토리 진짜 빠른합니다. 열거 형 생성자에 값을 전달하여 예상 답변으로 수행하는 것이 가장 좋습니다. 나는 실제로 재정의에 동의하지 않습니다 toString()
. 열거 형의 다른 사용자가 getKey()
재정의를 toString()
예상 할 수 없으므로 명시 적 getter를 사용하는 것이 좋습니다 .
그 name()
방법을 사용하십시오 :
public class Main {
public static void main(String[] args) throws Exception {
System.out.println(Strings.ONE.name());
}
}
enum Strings {
ONE, TWO, THREE
}
수율 ONE
.
Strings.STRING_ONE.name()
"ONE"이 아니라 "STRING_ONE"을 산출합니다. 이것은 단순히 좋은 대답이 아닙니다. 유효한 Java 식별자 등이 아닌 문자열을 가질 수 없습니다.
name()
는 난독 화 프로그램에 의해 영향을받을 수 있습니다. 얼마 전에 비슷한 문제가 발생했습니다. 예를 들어 Proguard를 사용하면이 문제를 해결해야합니다. Enumeration 클래스 처리
열거 형 이름을 원하는 문자열과 동일하게 설정하거나보다 일반적으로 임의의 속성을 열거 형 값과 연결할 수 있습니다.
enum Strings {
STRING_ONE("ONE"), STRING_TWO("TWO");
private final String stringValue;
Strings(final String s) { stringValue = s; }
public String toString() { return stringValue; }
// further methods, attributes, etc.
}
상수는 맨 위에 있고 메소드는 속성을 맨 아래에 두는 것이 중요합니다.
"문자열로 사용"의 의미에 따라 여기에서 열거 형을 사용하지 않을 수 있습니다. 대부분의 경우, Elite Gentleman이 제안한 솔루션을 사용하면 in System.out.println(STRING_ONE)
또는 to와 같은 toString 메소드를 통해 사용할 수 String s = "Hello "+STRING_TWO
있지만 실제로 String (예 :)이 필요한 경우 STRING_ONE.toLowerCase()
상수로 정의하는 것이 좋습니다.
public interface Strings{
public static final String STRING_ONE = "ONE";
public static final String STRING_TWO = "TWO";
}
toLowerCase()
내 솔루션을 원한다면 갈 수 있습니다 Strings.STRING_TWO.toString().toLowerCase()
.
interface
가있는 final
클래스 대신 사용하면 안됩니다 private
. 낙심 한 연습입니다.
문자열 Enum에 사용할 수 있습니다
public enum EnumTest {
NAME_ONE("Name 1"),
NAME_TWO("Name 2");
private final String name;
/**
* @param name
*/
private EnumTest(final String name) {
this.name = name;
}
public String getName() {
return name;
}
}
그리고 주요 메소드에서 호출
public class Test {
public static void main (String args[]){
System.out.println(EnumTest.NAME_ONE.getName());
System.out.println(EnumTest.NAME_TWO.getName());
}
}
당신이 경우 하지 않습니다 사용할 생성자를 , 그리고 당신이해야 할 특별한 이름을 방법, 그것은이 시도 :
public enum MyType {
ONE {
public String getDescription() {
return "this is one";
}
},
TWO {
public String getDescription() {
return "this is two";
}
};
public abstract String getDescription();
}
이것이 가장 빠른 해결책 이라고 생각합니다 . final 변수 를 사용할 필요가 없습니다 .
private String text
최종적이어야합니다.