gpt4 book ai didi

使用 Java 8 默认方法和实用程序类的 Java 通用枚举功能

转载 作者:行者123 更新时间:2023-11-30 07:54:41 25 4
gpt4 key购买 nike

下面是我想出的失败尝试,引用Java Generic Enum class using Reflection .

想找到更好的方法来做到这一点。我发现这种方法有几个问题:

  • 每次我都需要传递类类型。示例 - EnumUtility.fromKey(Country.class, 1)

  • fromSet 在 City 和 Country 中都是重复的

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));
}
}

最佳答案

无法避免将枚举类传递给 fromKey。您还怎么知道要检查请求的 key 的枚举常量?注意:该方法中的第二个参数应该是 int 类型,而不是 Integer。在 Integer 实例上使用 == 不会比较数值,它会比较对象引用!

EnumUtility.fromSet 应该可以正常工作,因此每个枚举类根本不需要 fromSet 方法。请注意,EnumUtility.fromSet 根本不需要 Class 参数,实际上您的代码没有使用该参数。

关于使用 Java 8 默认方法和实用程序类的 Java 通用枚举功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43895415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com