【发布时间】:2017-10-09 06:37:04
【问题描述】:
以下是我想出的失败尝试,指的是Java Generic Enum class using Reflection。
想找到一种更好的方法来做到这一点。我发现这种方法存在几个问题:
每次我都需要传递类类型。示例 - EnumUtility.fromKey(Country.class, 1)
fromSet 在城市和国家/地区都重复
public enum City implements BaseEnumInterface {
TOKYO(0), NEWYORK(1);
private final int key;
public static Set<Integer> fromValue(Set<City> enums) {
return enums.stream().map(City::getKey).collect(Collectors.toSet());
}
public int getKey() {
return key;
}
private City(int key) {
this.key = key;
}
}
public enum Country implements BaseEnumInterface {
USA(0), UK(1);
private final int key;
public static Set<Integer> fromSet(Set<Country> enums) {
return enums.stream().map(Country::getKey).collect(Collectors.toSet());
}
public int getKey() {
return key;
}
private Country(int key) {
this.key = key;
}
}
public class EnumUtility {
public static <E extends Enum<E> & BaseEnumInterface> E fromKey(Class<E> enumClass, Integer key) {
for (E type : enumClass.getEnumConstants()) {
if (key == type.getKey()) {
return type;
}
}
throw new IllegalArgumentException("Invalid enum type supplied");
}
public static <E extends Enum<E> & BaseEnumInterface> Set<Integer> fromSet(Class<E> enumClass, Set<E> enums) {
return enums.stream().map(BaseEnumInterface::getKey).collect(Collectors.toSet());
}
}
interface BaseEnumInterface {
int getKey();
}
public class EnumTester {
public static void main(String args[]) {
System.out.println(EnumUtility.fromKey(Country.class, 1));
}
}
【问题讨论】:
-
那为什么你的
enums又实现了一个接口呢?
标签: java generics enums interface java-8