考虑以下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)