从枚举值中获取枚举名称

新手上路,请多包涵

我已经阅读了很多有关如何使用 java 从其值中获取 enum 的相应名称的信息,但似乎没有任何示例对我有用!怎么了?

 public class Extensions {

    public enum RelationActiveEnum
    {
        Invited(0),
        Active(1),
        Suspended(2);

        private final int value;

        private RelationActiveEnum(final int value) {
            this.value = value;
        }
    }

}

在另一堂课中我使用:

         int dbValue = supp.ACTIVE;
        Extensions.RelationActiveEnum enumValue(dbValue);
        String stringName = enumValue.toString(); //Visible
        // OR
        int dbValuee = supp.ACTIVE;
        String stringValue = Enum.GetName(typeof(RelationActiveEnum), dbValue);

我应该工作,对吧?但它没有!它告诉我 dbValue cannot be cast to RelationActiveEnum …

原文由 Camilla 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

由于您的“价值”也恰好与序数匹配,您可以这样做:

 public enum RelationActiveEnum {
    Invited,
    Active,
    Suspended;

    private final int value;

    private RelationActiveEnum() {
        this.value = ordinal();
    }
}

并从值中获取枚举:

 int value = 1;
RelationActiveEnum enumInstance = RelationActiveEnum.values()[value];

我想静态方法是放置它的好地方:

 public enum RelationActiveEnum {
     public static RelationActiveEnum fromValue(int value)
             throws IllegalArgumentException {
         try {
              return RelationActiveEnum.values()[value]
         } catch(ArrayIndexOutOfBoundsException e) {
              throw new IllegalArgumentException("Unknown enum value :"+ value);
         }
     }
}

显然,如果您的“值”与枚举序数的值不同,这一切都会分崩离析。

原文由 Gareth Davis 发布,翻译遵循 CC BY-SA 3.0 许可协议

假设我们有:

 public enum MyEnum {
  Test1, Test2, Test3
}

要获取枚举变量的名称,请使用 name()

 MyEnum e = MyEnum.Test1;
String name = e.name(); // Returns "Test1"

要从(字符串)名称获取枚举,请使用 valueOf()

 String name = "Test1";
MyEnum e = Enum.valueOf(MyEnum.class, name);

如果您需要 integer 值来匹配枚举字段,请扩展枚举类:

 public enum MyEnum {
  Test1(1), Test2(2), Test3(3);

  public final int value;

  MyEnum(final int value) {
     this.value = value;
  }
}

现在您可以使用:

 MyEnum e = MyEnum.Test1;
int value = e.value; // = 1

并使用整数值查找枚举:

 MyEnum getValue(int value) {
  for(MyEnum e: MyEnum.values()) {
    if(e.value == value) {
      return e;
    }
  }
  return null;// not found
}

原文由 Veger 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题