Java-如何通过字符串访问Enum Class和Enum对象?

Umair Khan:

所以我有一个带有多个枚举的Java类

public class Enumerations {
    public enum Days {
        Monday("MON")
        Tuesday("Tue")

        string value;
        private Days(String value){
            this.value = value
        }
        public string getValue(){
            return this.value;
        }
    }
    public enum Months{
        January("JAN")
        APRIL("APR")

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

现在我有另一个类,我想在其中通过字符串访问enum类,因为我无法直接实例化enum,因为我不知道要使用的enum并从可变字符串访问enum值(不知道好)。

class EnumParser{
    public static void main(String args[]){
        String enum = "Days";     //Will get this value from external source so its variable(Can be months or days)
        String value = "Monday"   //This is going to variable as well with value unknown.
    }
}

那么我如何在这里使用字符串变量将输出显示为“ MON”

Enumerations.{{Days}}.{{Monday}}.getValue();

编辑了问题以获得更清晰的视图,“天”和“星期一”都是变量。

Kartik:

您可以使用if-elseswitch语句确定要使用的枚举,然后使用valueOf()

String e = "Days";
String value = "Monday";

if (e.equalsIgnoreCase(Enumerations.Days.class.getSimpleName())) {
    System.out.println(Enumerations.Days.valueOf(value).getValue());
} else if (e.equalsIgnoreCase(Enumerations.Months.class.getSimpleName())) {
    System.out.println(Enumerations.Months.valueOf(value).getValue());
} else {
    System.out.println("Could not find enum");
}

输出:

MON

根据评论更新,您可能有200多个枚举:

您可以像这样使用反射:

String e = "Days";
String value = "Monday";

String res = Arrays.stream(Enumerations.class.getDeclaredClasses())
        .filter(c -> c.getSimpleName().equalsIgnoreCase(e))
        .findFirst()
        .map(c -> {
            String result = null;
            try {
                Object o = c.getMethod("valueOf", String.class).invoke(null, value);
                result = (String) o.getClass().getMethod("getValue").invoke(o);
            } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e1) {
                e1.printStackTrace();
            }
            return result;
        }).orElse("Could not find");
System.out.println(res); //prints MON

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Java中的Enum对象中存储字符串

如何从 Java 中的字符串访问对象属性?

如何在Java中将字符串值转换为Enum?

如何通过字符串访问对象成员?

如何正确比较 Java 中的字符串(和对象)?

如何在具有JSON字符串的Java脚本对象中访问特定的键值对

java中如何将字符串转换为json字符串和对象

如何在Java中从ENUM的两个字符串之间随机选择一个字符串?

如何检查给定的字符串是否是Java中任何给定的Enum的一部分?

如何拆分通过的键值形式的空间和存储字符串在地图中使用Java?

如何使用Selenium和Java通过sendKeys方法传递双引号字符串

在开关情况下从Enum访问字符串

如何通过在变量中提供字符串值来获取 Enum 的 int 值

Java:使用class.forname.newinstance和if语句基于字符串创建对象

如何在Java的Enum中存储对象

休眠如何将Map <enum,enum>中的Enum键和值映射为字符串

通过名称作为字符串访问Java变量

java - 如何根据java中的字符串日期和动态子字符串对字符串进行排序?

如何通过从 React Native 中的字符串引用对象的值来访问对象?

对象对象如何返回字符串?(Java)

如何通过存储在字符串中的名称访问类的对象?

如何重写代码以避免TSLint“通过字符串文字访问对象”

可搜索的类似于Enum的对象,具有字符串和int转换

如何通过Cypher中的属性名称字符串访问和更改节点属性值?

如何通过使用变量和字符串构造名称来访问 var

Java-如何使非字符串对象的JComboBox显示字符串名称?

如何对象转换为Java中的查询字符串?

如何在Java中将字符串绑定到对象

如何从Java脚本中的字符串创建对象树