我试图构建一个通用方法,它将枚举
作为参数并处理一些信息。
但不幸的是,它不能像我希望的那样工作。也许你有一些建议来改进我的代码并防止错误。
private static ProductSearchColumnRange extractAllColumnRangeFromEnum(ProductSearchColumn column,
Enum someEnum) {
return ProductSearchColumnRange.builder()
.column(column)
.range(Arrays.stream(someEnum.values())
.map(element -> new RangeOption(element.getValue(), element.name()))
.collect(Collectors.toList()))
.build();
}
我在someEnum上遇到以下错误。values()
调用:
无法在Enum
我在元素上得到以下错误。getValue()
和元素。name()
调用:
无法解析方法getValue()
无法解析方法name()
我需要在方法extractAllColumnRangeFromEnum()
中使用的枚举都具有相同的结构。
例如,其中一个看起来像这样:
public enum DeploymentModelType {
PRIVATE("Private"),
HYBRID("Hybrid"),
PUBLIC("Public");
String value;
DeploymentModelType(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
我知道我可以通过使用
private static ProductSearchColumnRange extractAllColumnRangeFromEnum(ProductSearchColumn column,
DeploymentModelType someEnum) {
...
}
但我的方法不会是通用的。我想对我的任何枚举使用此方法。
java。lang.Enum
没有值()
方法,此方法由编译器隐式声明。这意味着values()
方法只存在于MyEnum中。类,在MyEnum中找不到。java
。
有关隐式声明方法和枚举规范的更多信息,请参见https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.9
由于您需要所有enum
元素来生成RangeOption
对象的列表,因此您的方法应该期望作为参数aClass
为了访问枚举常量,可以使用静态方法
EnumSet。枚举集的allOf()
。它需要enums类
为了能够调用自定义方法
getValue()
,您需要引入一个接口,比如ModelType
,该接口将声明该方法。反过来,DeploymentModelType
和其他枚举应该实现这个接口。
您需要在方法的声明中添加泛型类型参数。它需要放在修饰符之后(如果有)和方法的返回类型之前。
在这种情况下,泛型类型参数必须是
有关泛型方法语法的信息,请参阅本教程
代码可能是这样的:
private static <T extends Enum<T> & ModelType>
ProductSearchColumnRange
extractAllColumnRangeFromEnum(ProductSearchColumn column,
Class<T> enumClass) {
return ProductSearchColumnRange.builder()
.column(column)
.range(EnumSet.allOf(enumClass).stream()
.map(element -> new RangeOption(element.getValue(), element.name()))
.collect(Collectors.toList()))
.build();
}
public enum DeploymentModelType implements ModelType {
// your code
}
public interface ModelType {
String getValue();
}
问题内容: 帮我了解泛型。说我有两个枚举作为内部类,如下所示: 我不想让两个枚举都实现一个接口,而不得不两次实现相同的方法,而是希望在外部类中有一个方法可以执行以下操作: 但是,此方法无法编译。我要尝试做的是找出字符串值是否为枚举值的名称(在任何枚举中),无论是蔬菜,水果,还是其他。不管这实际上是否是冗余方法,我尝试(重新)编写的方法有什么问题? 基本上我想这样做: 问题答案: 原来有几个问题:
问题内容: 因此,我对Java枚举中是否可以包含函数感到困惑。我正在制作一个简单的html编辑器,并希望使用枚举来表示html标签,是的,我知道这不是解决问题的最佳方法,而是我小组决定实现它的方法。 所以我一直在尝试做这样的事情,但是当我试图称其为静态方法时,我想我想知道这是否正确,或者是否有更好的方法来实现它而不是公开成为 问题答案: 是的,Java枚举可以具有功能。 http://docs.o
我对Java中泛型的概念不熟悉。我有一个泛型方法,它的返回类型也是泛型。 我收到此错误,< code >无法解析T中的方法“getAa”。两个类都有这个成员变量,但是java并不理解,因为sub方法返回的是这个对象的一般列表。有没有办法改掉这个错误? 下面是我的代码,
本文向大家介绍Java枚举抽象方法实例解析,包括了Java枚举抽象方法实例解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Java枚举抽象方法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需求背景 需求已经确定了几个固定的常量值,并且每个常量值都有相同的行为,但是具体实现细节不同。建议使用枚举抽象方法,优点:结构清晰,便
问题内容: 我有几个使用下划线分隔单词的Java枚举。在我的每个枚举中,我都有一个toString方法,该方法实现为super.toString()。replace(“ _”,“”),这样我就可以在GUI上显示String值而没有下划线。有什么办法可以让我的所有枚举都使用此toString方法,而不必在所有这些枚举之间重复?如果这是一个常规类,答案很简单,实现toString()然后让我所有需要该
多次调用特定枚举类的value()函数是否效率低下? 我见过一些现有代码的实例,其中values()的结果被缓存以供重用。这有用吗?