【发布时间】:2023-03-24 15:56:01
【问题描述】:
我的应用程序中有 3 个枚举器类。所有 3 个类都有 2 个重复的方法,我们希望在我们实现的每个枚举中都可以使用这些方法。
public static List<String> supported(){
return Arrays.asList([[EnumClass]].values())
.stream().map(Enum::name).collect(Collectors.toList());
}
public static boolean contains(String value){
boolean response = false;
try {
response = value != null ? [[EnumClass]].valueOf(value.trim().toUppercase()) != null : false;
} catch (Exception e){
LOGGER.error("ERROR: {}", e);
}
return response;
}
这些方法中唯一改变的部分是 EnumClass,它是每个枚举的类。
第一个方法将打印枚举类的所有可能值,如果给定的字符串可以放入枚举类,则第二个方法将返回真/假。
我尝试实现一个实现这些方法的接口,但我不能使用 values(),因为它不是 Enum API 的一部分。我无法将这些方法与每个类具体关联起来,因为这些方法是公共静态的。我无法创建自定义类并扩展 Enum 来扩展它,因为 Java 不支持多重继承。
与此同时,我的代码正在运行,但重复确实让我很困扰,我觉得它可以做得更好。如果我们继续添加新的枚举器,那么重复只会变得更糟。
【问题讨论】:
-
您可以使用
Class.getEnumConstants()和Enum.valueOf()动态获取枚举值。