java - 我可以根据其字段的值获取枚举吗?

标签 java string enums

我想根据其字段值获取特定的枚举。

枚举:

public enum CrimeCategory {
    ASBO ("Anti Social Behaviour"),
    BURG ("Burglary"),
    CRIMDAM ("Criminal Damage And Arson"),
    DRUGS ("Drugs"),
    OTHTHEFT ("Other Theft"),
    PUPDISOR ("Public Disorder And Weapons"),
    ROBBERY ("Robbery"),
    SHOPLIF ("Shoplifting"),
    VEHICLE ("Vehicle Crime"),
    VIOLENT ("Violent Crime"),
    OTHER ("Other Crime");

    private  String category;


    private CrimeCategory (String category) {
        this.category = category;
    }

    public String returnString() {
        return category; 
    }
}


获取新枚举:

aStringRecivedFromJson = "Anti Social Behaviour"
CrimeCategory crimeCategoryEnum;
crimeCategoryEnum = CrimeCategory.valueOf(aStringRecivedFromJson); 

我一直在想办法让上面的方法恢复一个枚举,这样它就可以存储在 HashMap 中。与其他 Crime信息。

预期结果:ASBO

最佳答案

作为引用,这里有一个 HashMap 的替代解决方案:

enum CrimeCategory {
  ASBO("Anti Social Behaviour"),
  BURG("Burglary"),
  CRIMDAM("Criminal Damage And Arson"),
  DRUGS("Drugs"),
  OTHTHEFT("Other Theft"),
  PUPDISOR("Public Disorder And Weapons"),
  ROBBERY("Robbery"),
  SHOPLIF("Shoplifting"),
  VEHICLE("Vehicle Crime"),
  VIOLENT("Violent Crime"),
  OTHER("Other Crime");

  private static final Map<String, CrimeCategory> map = new HashMap<>(values().length, 1);

  static {
    for (CrimeCategory c : values()) map.put(c.category, c);
  }

  private final String category;

  private CrimeCategory(String category) {
    this.category = category;
  }

  public static CrimeCategory of(String name) {
    CrimeCategory result = map.get(name);
    if (result == null) {
      throw new IllegalArgumentException("Invalid category name: " + name);
    }
    return result;
  }
}

关于java - 我可以根据其字段的值获取枚举吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15370288/

相关文章:

java - Spring 从属性文件中获取枚举值

java - 如何以编程方式配置 log4j 2.5 RollingRandomAccessFileAppender 以限制文件而不重命名?

java - 新的空项目上的 Android Studio org.gradle.api.tasks.TaskExecutionException

java - wifi只能连接一次吗?

字符串合并和拆分算法

c# - 是否可以两次使用占位符字符串?

java - MapActivity - 如何限制缩放级别?

json - 将 Json 对象参数发送到 .net Core 中的 Web Api Controller

rust - 有没有比匹配更好的方法来访问相同类型的枚举值?

c# - 使用 TinyInt 隐藏/显示控件?