当前位置: 首页 > 知识库问答 >
问题:

为什么我得不到。枚举对象类中的值()?

路奇
2023-03-14

我想为任何枚举对象创建通用方法,它将检查枚举是否具有指定的值名称,但作为Enum类型对象,我无法使用方法value();。为什么?

有没有办法从Enum类型对象中获取值?

我需要这样的方法来检查配置中的值是否是myEnum的有效字符串。valueOf(字符串) 因为如果给定的字符串错误,那么它将抛出一个异常(我不想要它)。

我希望我的方法如下所示:

public static Boolean enumContains(Enum en, String valueString){
    return toStringList(en.values()).contains(valueString.toUpperCase());
}

但是没有方法Enum.values(),如何正确创建这个方法?

共有1个答案

刁越
2023-03-14

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开始,是一个凌乱类的示例,该类可以从使用中受益匪浅(除

  • 具有以下定义 是否有一种方法可以正确执行比较以使用标准等式: