我想为任何枚举对象创建通用方法,它将检查枚举是否具有指定的值名称,但作为Enum
类型对象,我无法使用方法value();
。为什么?
有没有办法从Enum
类型对象中获取值?
我需要这样的方法来检查配置中的值是否是myEnum的有效字符串。valueOf(字符串) 因为如果给定的字符串错误,那么它将抛出一个异常(我不想要它)。
我希望我的方法如下所示:
public static Boolean enumContains(Enum en, String valueString){
return toStringList(en.values()).contains(valueString.toUpperCase());
}
但是没有方法Enum.values()
,如何正确创建这个方法?
Enum#values
是编译器生成的方法,因此除非传入特定的Enum而不是
参见:https://stackoverflow.com/a/13659231/7294647
一种解决方案是传入一个类
public static <E extends Enum<E>> Boolean enumContains(Class<E> clazz, String valueString){
return toStringList(clazz.getEnumConstants()).contains(valueString.toUpperCase());
}
如果您有一个名为
MyEnum
的枚举,那么您可以简单地传入MyEnum.class
作为第一个参数。
我听到一些人建议在C++中使用枚举类,因为它们的类型安全。 但这到底意味着什么呢?
问题内容: 我想知道为什么在Java语言中a 不能扩展。 我不是在谈论一个延伸的(这不能做,因为Java没有多重继承,而Š隐含延长),但一类的以只添加额外的方法,而不是额外的枚举值。 就像是: 要这样使用: 因此,有人可以对此限制提供理由(或将我指向正确的JLS部分)吗? 问题答案: 我认为 他们这样做 的答案来自以下问题: 在您的示例中,如何实例化MyClass?用户永远不会(通过)显式实例化枚
问题内容: 我想做的是这样的: Eclipse中给了我这个编译错误的:。 当我将类设为静态时,该错误消失。我可以使static,但我不明白为什么我不能在内部类中声明一个。 问题答案: 定义为嵌套类型的类型始终是隐式的(请参见JLS§8.9。Enums) 您不能在非静态类型(也就是“内部类”,请参见JLS§8.1.3。内部类和封闭实例)中拥有静态嵌套类型。 因此,您不能在非静态嵌套类型中包含内部类型
问题内容: 在Java 5及更高版本中,您具有foreach循环,该循环可以神奇地实现任何实现的对象: 但是,仍然没有实现,这意味着要迭代一个,您必须执行以下操作: 有谁知道为什么仍然不执行? 编辑: 为澄清起见,我不是在谈论枚举的语言概念,而是在Java API中称为“ 枚举 ” 的Java特定类。 问题答案: 枚举没有被修改为支持Iterable,因为它是一个接口,而不是一个具体的类(例如Ve
问题内容: 我是一名即将毕业的计算机科学专业的学生,在我的整个编码生涯中,我发现很少使用枚举的实例,除了典型的情况(例如代表标准纸牌的面孔)外,还使用了枚举。 您是否知道在日常编码中使用枚举的任何巧妙方法? 为什么枚举如此重要,在什么情况下应该能够确定建立枚举是最佳方法? 问题答案: 这些是主要的论点,以及短的例子。 的情况 从Java 6开始,是一个凌乱类的示例,该类可以从使用中受益匪浅(除
具有以下定义 是否有一种方法可以正确执行比较以使用标准等式: