我的应用程序中有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,它是每个enum的类。
第一个方法将打印枚举类的所有可能值,第二个方法将返回true/false(如果给定字符串可以放入枚举类中)。
我试图实现实现这些方法的接口,但我不能使用值(),因为它不是Enum API的一部分。我不能将这些方法与每个类具体联系起来,因为这些方法是公共静态的。我不能创建自定义类并扩展枚举来扩展它,因为Java不支持多重继承。
与此同时,我让我的代码工作,但复制真的困扰着我,我觉得它可以做得更好。如果我们继续添加新的枚举器,那么重复只会变得更糟。
您不能让Enum类实现接口,但是您可以在每个枚举上保留对对象的静态引用,这些对象可以实现公共接口。这将减少重复的数量。
public static class EUtils<E extends Enum<E>> {
private final E[] values;
private Function<String,E> valueOf;
public EUtils(E[] values, Function<String,E> valueOf) {
this.values = values;
this.valueOf = valueOf;
}
public List<String> supported(){
return Arrays.asList(values)
.stream().map(Enum::name).collect(Collectors.toList());
}
public boolean contains(String value){
boolean response = false;
try {
response = value != null ? valueOf.apply(value.trim().toUpperCase()) != null : false;
} catch (Exception e){
e.printStackTrace();
}
return response;
}
}
private enum Directions {
LEFT,
RIGHT;
public static EUtils<Directions> enumUtils = new EUtils<>(Directions.values(),Directions::valueOf);
}
public static void main(String[] args) {
System.out.println(Directions.enumUtils.contains("LEFT"));
System.out.println(Directions.enumUtils.contains("X"));
}
问题内容: 我有很多实现此接口的枚举: 一个典型的例子是: 可以想象,这些方法在CodableEnum的所有实现中实际上是相同的。我想消除这种重复,但坦率地说不知道如何做。我尝试使用如下类: 但这实际上是没有用的,因为: 枚举不能扩展类 枚举的元素(SKYPE,GOOGLE_TALK等)无法扩展类 我无法提供getByCode()的默认实现,因为DefaultCodableEnum本身不是枚举。我
我想在curl代码中加入一个变量,我该怎么做?我尝试了以下代码,但没有为我工作,这是我的代码
我在执行时出现了这个错误: 我错过了什么?
问题内容: 我正在尝试为Java创建一个小的功能性编程库(只是为了解决自己的问题)。虽然定义高阶函数为S,S和就是我所遇到的这个问题:需要收集的功能,并返回相同类型的具有几乎相同的实现的集合,但必须重新界定为每个数据结构-s,s和s。 例如,这是s和s 的函数的实现: 一个函数: 如从这个例子可以看出,对于实施方式中的主体和几乎相同。 有喜欢很多很多的功能,并在我的图书馆,每一类又是对每种类型我很
你好,我正在使用以下函数将数据集中的所有分类值转换为数字,但我想将其转换为使用OneHotEncoder,如何做到这一点? 谢谢
我已经创建了一个CodeStar项目(PythonWebService模板作为起点),并且正在使用vscode对其进行编辑。 到目前为止,我已经自定义生成的项目有两个lambdas。结构如下: 它使用“sam本地启动api”并使用AWS仪表板进行测试。 但是,除了在每个lambda上复制粘贴“. py”文件作为模块使用之外,我没有设法重用“lambda1”和“lambda2”之间的代码。尝试编辑r