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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |