【发布时间】:2013-09-19 06:45:41
【问题描述】:
考虑以下枚举类:
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 是否为 Enum:
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;
【问题讨论】:
-
感谢您的快速响应。如何可靠地测试 Object 是否是 Enum 的实例?
-
你这是什么意思?你可以添加一个例子吗?如果你需要做这样的事情,那么我猜你的设计有问题。
标签: java enums inner-classes