使用Java 8,我有一个Map,我需要转换为另一个Map替换键名,有时替换值.例如,当它们变成枚举时,我需要将这些枚举转换为其他常量(字符串,有时是整数).我不想比较字符串,即theEnum.name()由于可能的重复,但更喜欢将对象转换为枚举并打开它.但是,我找不到将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);
Run Code Online (Sandbox Code Playgroud)
}
我知道我能做到:
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);
}
Run Code Online (Sandbox Code Playgroud)
但是发现它不那么优雅,并且像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");
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
if (enumMap.containsKey(value)) {
value = enumMap.get(value);
}
map.put(key, value);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3934 次 |
| 最近记录: |