加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何将Object转换为枚举以在switch语句中使用它

发布时间:2020-12-15 04:37:23 所属栏目:Java 来源:网络整理
导读:使用 Java 8,我有一个Map,我需要转换为另一个Map替换键名,有时替换值.例如,当它们变成枚举时,我需要将这些枚举转换为其他常量(字符串,有时是整数).我不想比较Strings,即theEnum.name(),因为可能有重复,但更喜欢将Object转换为枚举并打开它.但是,我找不到将Ob
使用 Java 8,我有一个Map,我需要转换为另一个Map替换键名,有时替换值.例如,当它们变成枚举时,我需要将这些枚举转换为其他常量(字符串,有时是整数).我不想比较Strings,即theEnum.name(),因为可能有重复,但更喜欢将Object转换为枚举并打开它.但是,我找不到将Object转换为可切换枚举的方法. Enum.valueOf不会返回可以切换的内容(请参阅下面的示例).

private void put(String key,Object value) {
  if (value != null && value.getClass().isEnum()) {
  Enum<?> val = (Enum<?>)value; 
  /* The below line has the following problem:
   * Cannot switch on a value of type Enum. 
   * Only convertible int values,strings or enum variables are 
   * permitted */
  switch (Enum.valueOf(val.getClass(),val.name())) {
    case EmploymentType.FULL_TIME_EMPLOYEE : value = "Fast anst?lld";
         break;
    case ResidenceType.TENANCY : value = "Hyresr?tt";
         break;
    default : break;
  }
}
map.put(key,value);

}

我知道我能做到:

private void put(String key,Object value) {
  if (value != null && value.getClass().isEnum()) {
    if (value.equals(EmploymentType.FULL_TIME_EMPLOYEE) value = "Fast anst?lld";
    else if (value.equals(ResidenceType.TENANCY) value = "Hyresr?tt";
  }
  map.put(key,value);    
}

但是发现它不那么优雅,并且像switch语句一样容易阅读.有没有办法做到这一点?

解决方法

看起来你必须处理多种枚举类型.但是你不能在一个switch语句中切换多个枚举类型.我想你可以使用Map< Enum<?>,Object>代替.

您可以像这样设置HashMap:

Map<Enum<?>,Object> enumMap = new HashMap<>();
enumMap.put(EmploymentType.FULL_TIME_EMPLOYEE,"Fast anst?lld");
enumMap.put(ResidenceType.TENANCY,"Hyresr?tt");

并像这样使用它:

if (enumMap.containsKey(value)) {
    value = enumMap.get(value);
}
map.put(key,value);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读