根据我的理解,对于使用Class.isEnum()语句声明的任何枚举值,enum应该返回true。

如果枚举是匿名声明的,则返回false。
isEnum()的文档指出:

“只有在此类被声明为枚举时才返回true
源代码。”

这对我来说似乎有点模棱两可。

我正在寻找一种将枚举常量与其他对象区分开的方法,因此我需要isEnum()为所有枚举常量返回true,即使它们匿名重写某些内容也是如此。

除此之外,还有什么方法可以识别枚举常量?

运行该类,并查看每个常量的isEnum()的结果。它将为每个常量打印isEnum()的值。

我期望所有常量都应为isEnum()返回true。
但是可悲的是,第三个常量的isEnum()返回false。

public enum EnumTest {
Alpha(3), Beta(6), Delta(4) {
    @Override
    public int getValue() {
        return -1;
    }

    @Override
    public String toString() {
        return "Gamma";
    }
},
Epsilon(9);

private int value;

EnumTest(int value) {
    this.value = value;
}

public int getValue() {
    return this.value;
}

public static boolean isEnumWorkaround(Class enumClass) {
    while (enumClass.isAnonymousClass()) {
        enumClass = enumClass.getSuperclass();
    }
    return enumClass.isEnum();
}

public static void main(String[] args) {
    for (EnumTest thing : EnumTest.values()) {
        String nameString = thing + " (" + thing.name() + ")";
        System.out.println(String.format(
                "%-18s isEnum = %-5b [workaround isEnum = %b]", nameString, thing
                        .getClass().isEnum(), isEnumWorkaround(thing.getClass())));
    }
  }
}

请检查并让我知道我的理解是否正确。

最佳答案

如果我的理解是正确的,那么Class#isEnum()并非旨在检查类是否为枚举。它只是让您可以内省Introspection 类声明。

如评论中所述,您可以通过以下方式轻松实现您想做的事情

yourEnumValue.getClass().isAssignableFrom(Enum.class)

要么
yourEnumValue instanceof Enum

08-05 19:56