enum
型に一連の文字列を表現させるための最良の方法は何ですか?
私はこれを試しました:
enum Strings{
STRING_ONE("ONE"), STRING_TWO("TWO")
}
どうやってそれらをStrings
として使うことができますか?
私はあなたが何をしたいのかわかりませんが、これは私が実際にあなたのサンプルコードを翻訳する方法です....
/**
*
*/
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;
}
}
あるいは、text
の取得メソッドを作成することもできます。
Strings.STRING_ONE.toString();
ができるようになりました
Enumのカスタム文字列値
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
そのname()
メソッドを使います。
public class Main {
public static void main(String[] args) throws Exception {
System.out.println(Strings.ONE.name());
}
}
enum Strings {
ONE, TWO, THREE
}
ONE
を返します。
Enum名を希望する文字列と同じに設定するか、より一般的には、任意の属性をenum値に関連付けることができます。
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.
}
一番上に定数を、一番下にmethods/attributesを持つことが重要です。
「文字列として使用する」という意味によっては、ここで列挙型を使用したくない場合があります。ほとんどの場合、The Elite Gentlemanによって提案された解決策は、あなたがそれらのtoStringメソッドを通してそれらを使うことを可能にするでしょう。 System.out.println(STRING_ONE)
やString s = "Hello "+STRING_TWO
ではありますが、本当に文字列が必要な場合(例えばSTRING_ONE.toLowerCase()
)、それらを定数として定義した方が良いでしょう:
public interface Strings{
public static final String STRING_ONE = "ONE";
public static final String STRING_TWO = "TWO";
}
あなたは文字列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;
}
}
そしてmainメソッドから呼び出す
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)を使う必要はない。
デフォルト値を取得して設定します。
public enum Status {
STATUS_A("Status A"), STATUS_B("Status B"),
private String status;
Status(String status) {
this.status = status;
}
public String getStatus() {
return status;
}
}