考虑以下枚举类:
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 ();
}
然后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 */
然而
Enum.class.isAssignableFrom(a.getClass()); /* returns true */
内部类 APlanet.MARS 不是 Enum 有点令人困惑,但您可以将其分配给 Enum,如下所示:
Enum<?> m = APlanet.MARS;