web-dev-qa-db-ja.com

文字列の列挙動を作成するための最良の方法は?

enum型に一連の文字列を表現させるための最良の方法は何ですか?

私はこれを試しました:

enum Strings{
   STRING_ONE("ONE"), STRING_TWO("TWO")
}

どうやってそれらをStringsとして使うことができますか?

335
Dori

私はあなたが何をしたいのかわかりませんが、これは私が実際にあなたのサンプルコードを翻訳する方法です....

/**
 * 
 */
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();ができるようになりました

576
Buhake Sindi

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
100
vaichidrewar

そのname()メソッドを使います。

public class Main {
    public static void main(String[] args) throws Exception {
        System.out.println(Strings.ONE.name());
    }
}

enum Strings {
    ONE, TWO, THREE
}

ONEを返します。

64
Bart Kiers

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を持つことが重要です。

16
Adrian Smith

「文字列として使用する」という意味によっては、ここで列挙型を使用したくない場合があります。ほとんどの場合、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";      
}
13
hd42

あなたは文字列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());
    }
}
4
Shohel Rana

もしあなたがを使わないで、コンストラクタを使い、メソッドに特別な名前)を使いたいのなら、これを試してください:

public enum MyType {
  ONE {
      public String getDescription() {
          return "this is one";
      }
  },    
  TWO {
      public String getDescription() {
          return "this is two";
      }
  };

  public abstract String getDescription();
}

私はこれが最速解法であると思う。変数変数final)を使う必要はない。

3
Adam111p

デフォルト値を取得して設定します。

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;
    }
}
0
Pravin