在Java中调用枚举

在Java中调用枚举,java,enums,invoke,Java,Enums,Invoke,假设我在Javaenum中有许多字段(String或int),并且我希望通过字段名动态获取字段值 public enum Code { FIRST("valueForFirst"), SECOND("valueForSecond"); // etc } 然后我得到我想要的字段的名称: String fieldName = getEnumFieldName(); // can be: "FIRST" or "SECOND" // now get "fieldName"

假设我在
Java
enum中有许多字段(
String
int
),并且我希望通过字段名动态获取字段值

public enum Code {

    FIRST("valueForFirst"),
    SECOND("valueForSecond");
    // etc
}
然后我得到我想要的字段的名称:

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

如何执行此操作?

如果您是从其他地方以字符串形式获取字段名称,则可以使用
valueOf()
方法获取枚举实例。。但是,首先需要将字符串全部转换为大写

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

浏览本教程-有关如何使用
枚举的详细信息

您可以这样定义枚举:

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();
然后像这样使用它:

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();
或者像这样:

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

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

Code c = Code.valueOf(Code.class, 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 ); } 
}

可以对枚举使用
valueOf()
方法

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

我想我不清楚。我对调用此枚举感兴趣。谢谢。问题是我不知道fieldName是“FIRST”还是“SECOND”,它是动态出现的。如果fieldName是动态的(我不知道它是如何出现的,或者为什么这是个好主意),您可以使用反射来查看enum提供的字段。@Madrugada。。你怎么知道的??动态?@Madrugada。。看看我编辑的帖子。。这就是你想要的吗???@Madrugada。。你可以通过我提供的教程链接来更好地理解Enum的工作。为什么有人投了反对票?这是那些臭名昭著的“战术否决票”之一吗?@Madrugada是我的答案中缺少的东西吗?是的,我想动态加载…请看lynks的答案,很抱歉unclear@Madrugada指定
code.class
是冗余的。