簡體   English   中英

用Java調用枚舉

[英]Invoke enum in Java

假設我的Java枚舉中有多個字段( Stringint ),並且我想通過其名稱動態獲取字段值。

public enum Code {

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

然后,我得到了想要的字段名稱:

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

我怎樣才能做到這一點 ?

您需要使用Enum.valueOf(); 如:

Code c = Code.valueOf(Code.class, fieldName);

如果要從其他地方以字符串形式獲取字段名稱,則可以使用valueOf()方法獲取Enum實例。但是,首先,您需要將字符串全部轉換為大寫。

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

通過本教程中去 - http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html有關如何使用的詳細信息Enums ..

您可以這樣定義您的枚舉:

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();

如果您想從代碼中獲取“第一”,只需執行

String name = code.name();

您可以在枚舉上使用valueOf()方法。

String fieldName = "FIRST"; // or "SECOND" 
Code c = Code.valueOf(fieldName);

這是我使用的模式:

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聲明內的static塊中訪問enum類型的實例看起來有些奇怪,但是此代碼有效。

在您的情況下,可能看起來像這樣:

String fieldName = Code.valueOf(Code.class).getValue();
    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();



        }

  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM