isEnum()对于在 java 中定义的 enum 工作绝对正常class。
令我惊讶的是,如果失败了java.lang.Enum.class.isEnum()。
以下代码产生true , false作为输出,但是我期待true , true
public class Test {
public static void main(String[] args) {
System.out.println(Color.class.isEnum());
System.out.println(java.lang.Enum.class.isEnum());
}
}
enum Color {
RED, GREEN, BLUE;
}
Run Code Online (Sandbox Code Playgroud)
为什么会isEnum()这样?
你可以很容易地在Enum源代码中看到java.lang.Enum它实际上是一个class:
public abstract class Enum<E extends Enum<E>>
implements Comparable<E>, Serializable {
//...
}
Run Code Online (Sandbox Code Playgroud)
isEnum()状态文档:
当且仅当此类在源代码中被声明为枚举时才返回 true。
java.lang.Enum 被声明为
public abstract class Enum<E extends Enum<E>>...
Run Code Online (Sandbox Code Playgroud)
因此,根据定义,它不是枚举。除此之外,的实现isEnum()还给出了另一个提示:
public boolean isEnum() {
// An enum must both directly extend java.lang.Enum and have
// the ENUM bit set; classes for specialized enum constants
// don't do the former.
return (this.getModifiers() & ENUM) != 0 &&
this.getSuperclass() == java.lang.Enum.class;
}
Run Code Online (Sandbox Code Playgroud)
java.lang.Enum.class 不会通过最后一次检查
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |