小编use*_*878的帖子

枚举内部类不被识别为枚举

考虑以下Enum类:

public enum APlanet {
    VENUS   ()  {public void stuff(){}},
    EARTH   () {public void stuff(){}},
    MARS    ()  {public void stuff(){}};
    public abstract void stuff();
}

public enum BPlanet {
    VENUS   (),
    EARTH   (),
    MARS    ();
}
Run Code Online (Sandbox Code Playgroud)

然后APlanet.MARS.getClass().isEnum()返回false,然后BPlanet.MARS.getClass().isEnum()返回true.为什么?请注意,APlanet.getDeclaringClass().isEnum()正确返回true.

具体来说,我正在尝试可靠地测试对象是否为枚举:

Object a = APlanet.MARS;
Object b = BPlanet.MARS;
a.getClass().isEnum() /* returns false */
b.getClass().isEnum() /* returns true  */
Run Code Online (Sandbox Code Playgroud)

然而

Enum.class.isAssignableFrom(a.getClass()); /* returns true */
Run Code Online (Sandbox Code Playgroud)

内部类APlanet.MARS不是Enum但是你可以将它分配给枚举,这有点令人困惑,如:

Enum<?> m = APlanet.MARS;
Run Code Online (Sandbox Code Playgroud)

java enums inner-classes

2
推荐指数
1
解决办法
517
查看次数

标签 统计

enums ×1

inner-classes ×1

java ×1