快速枚举问题

发布于 2024-11-07 05:09:43 字数 798 浏览 0 评论 0原文

嘿伙计们,我有一个简单的问题。如果给定一个字符串值,我如何在枚举类中获取相应的 int 值?

例如:

给定一个字符串“Ordinary”,我希望返回值 0。这是我所拥有的:

public enum MembershipTypes 
{
    ORDINARY(0,"Ordinary"),
    WORKING(1,"Working"),
    CORE(2,"Core"),
    COORDINATOR(3,"Coordinator");

    private int intVal;
    private String strVal;

    /**
     * 
     * @param intValIn
     * @param strValIn
     */
    MembershipTypes(int intValIn, String strValIn)
    {
        intVal = intValIn;
        strVal = strValIn;
    }

    /**
     * 
     * Gets the integer value
     * @return intVal
     */
    public int getIntVal() 
    {
        return intVal;
    }

    /**
     * 
     * Gets the string value
     * @return strVal
     */
    public String getStrVal() 
    {
        return strVal;
    }
}

Hey guys, I have a quick question. If given a string Value how can i get the corresponding int value in my enum class?

Ex:

Given a string "Ordinary" I want the value 0 returned. Here is what I have:

public enum MembershipTypes 
{
    ORDINARY(0,"Ordinary"),
    WORKING(1,"Working"),
    CORE(2,"Core"),
    COORDINATOR(3,"Coordinator");

    private int intVal;
    private String strVal;

    /**
     * 
     * @param intValIn
     * @param strValIn
     */
    MembershipTypes(int intValIn, String strValIn)
    {
        intVal = intValIn;
        strVal = strValIn;
    }

    /**
     * 
     * Gets the integer value
     * @return intVal
     */
    public int getIntVal() 
    {
        return intVal;
    }

    /**
     * 
     * Gets the string value
     * @return strVal
     */
    public String getStrVal() 
    {
        return strVal;
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

梦言归人 2024-11-14 05:09:43

这是最简单的方法。将此静态方法添加到您的枚举中:

public static int getIntValForString(String strVal) {
   for (MembershipTypes e : MembershipTypes.values()) {
      if (e.getStrVal().equals(strVal)) {
         return e.getIntVal();
      }
   }
   throw new IllegalArgumentException("No such enum for string val:" + strVal);
}

Here's the simplest way to do it. Add this static method to your enum:

public static int getIntValForString(String strVal) {
   for (MembershipTypes e : MembershipTypes.values()) {
      if (e.getStrVal().equals(strVal)) {
         return e.getIntVal();
      }
   }
   throw new IllegalArgumentException("No such enum for string val:" + strVal);
}
笙痞 2024-11-14 05:09:43

使用:

private static final Map<String, MEMBERSHIP_TYPES> MEMBERSHIP_TYPES = new HashMap<String, MembershipTypes>;
static {
  for (MembershipTypes membershipType : values()){
     MEMBERSHIP_TYPES.put(membershipType.strVal, membershipType);
  }
}

public static int getIntVal(String strVal){
  if (! MEMBERSHIP_TYPES.containsKey(strVal){
     throw new IllegalArgumentException("Unknown value: " + strVal);
  }
  return MEMBERSHIP_TYPES.get(strVal).getIntVal();
}

考虑:

  • 将 MembershipTypes 重命名为 MembershipType
  • 如果可能,将 intVal 和 strVal 重命名为更有意义的属性名称

Use:

private static final Map<String, MEMBERSHIP_TYPES> MEMBERSHIP_TYPES = new HashMap<String, MembershipTypes>;
static {
  for (MembershipTypes membershipType : values()){
     MEMBERSHIP_TYPES.put(membershipType.strVal, membershipType);
  }
}

public static int getIntVal(String strVal){
  if (! MEMBERSHIP_TYPES.containsKey(strVal){
     throw new IllegalArgumentException("Unknown value: " + strVal);
  }
  return MEMBERSHIP_TYPES.get(strVal).getIntVal();
}

Consider:

  • renaming MembershipTypes to MembershipType
  • renaming intVal and strVal to more meaningful property names if possible
郁金香雨 2024-11-14 05:09:43

您的枚举会自动获取一个方法 valueOf(String),该方法在给定枚举名称时返回正确的枚举。您可以覆盖它来检查您的 strVal。或者,您可以编写一个直接返回 int 值的实用函数。

Your enum automatically gets a method valueOf(String) that returns the right enum when given an enum name. You can override that to also check for your strVal. Alternatively, you could write a utility function that returns the int value directly.

豆芽 2024-11-14 05:09:43

我认为你可以使用ordinal()。

I think you can use ordinal().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文