0

列挙型にいくつかのフィールド(Stringまたはint)がJavaあり、その名前でフィールド値を動的に取得したいとします。

public enum Code {

    FIRST("valueForFirst"),
    SECOND("valueForSecond");
    // etc
}

次に、必要なフィールドの名前を取得します。

String fieldName = getEnumFieldName(); // can be: "FIRST" or "SECOND" 
// now get "fieldName"'s value from Code

これどうやってするの ?

4

6 に答える 6

4

Enum.valueOf();次のように使用する必要があります。

Code c = Code.valueOf(Code.class, fieldName);
于 2012-10-08T12:46:51.870 に答える
2

別の場所から文字列形式でフィールドの名前を取得している場合は、valueOf()メソッドを使用してEnumインスタンスを取得できます。ただし、最初に文字列をすべて大文字に変換する必要があります。

String fieldName = getEnumFieldName();
Code first = Code.valueOf(fieldName);
String value = first.getValue();

使用方法の詳細については、このチュートリアルhttp://docs.oracle.com/javase/tutorial/java/javaOO/enum.htmlEnums )を参照してください。

于 2012-10-08T12:44:54.773 に答える
2

次のように列挙型を定義できます。

public enum Code {

    private String value;

    public Code(String value) {
       this.value = value;
    }

    public String getValue() {
       return value;
    }

    FIRST("valueForFirst"),
    SECOND("valueForSecond");
}

そしてそれをこのように使用します:

Code code = Code.FIRST;
String val = code.getValue();

またはこのように:

String key = "FIRST";
Code code = Code.valueOf(key);
String val = code.getValue();

コードから「FIRST」を取得したい場合は、

String name = code.name();
于 2012-10-08T12:46:02.473 に答える
1

valueOf()列挙型でメソッドを使用できます。

String fieldName = "FIRST"; // or "SECOND" 
Code c = Code.valueOf(fieldName);
于 2012-10-08T12:48:05.873 に答える
0
    public enum Code {

        FIRST("valueForFirst"),
        SECOND("valueForSecond");

    }

    public class Test{

       Code c;

       public static void main(String[] args){

        Test t = new Test();

        String val = t.c.FIRST.getValue();



        }

  }
于 2012-10-08T12:49:15.503 に答える
0

これが私が使用するパターンです:

enum X {
    A("a"), B("b"), ...;

    private final static Map<String,X> MAP = new HashMap<String,X>();
    static {
        for( X elem: X.values() ) {
            if( null != MAP.put( elem.getValue(), elem ) ) {
                throw new IllegalArgumentException( "Duplicate value " + elem.getValue() );
            }
        }
    }

    private final String value;

    private X(String value) { this.value = value; }
    public String getValue() { return value; }

    // You may want to throw an error here if the map doesn't contain the key
    public static X byValue( String value ) { return MAP.get( value ); } 
}

宣言内のブロック内のenum型のインスタンスにアクセスするのは少し奇妙に見えますが、このコードは機能します。staticenum

あなたの場合、は次のようになります。

String fieldName = Code.valueOf(Code.class).getValue();
于 2012-10-08T12:47:11.153 に答える