我正在尝试为枚举定义一个基类 (SubStatus
)。
下面的static
block 什么时候调用?如果它们是类而不是枚举,我相信它们会在调用类构造函数之后被调用?
但是因为它们是 Enum
,所以这些不是更像 static
类吗?那么也许静态 block 是在容器加载静态实例时执行的?
子状态
public enum SubStatus
{
WAITING(0),
READY(1);
protected static final Map<Integer,SubStatus> lookup
= new HashMap<Integer,SubStatus>();
static {
for(SubStatus s : EnumSet.allOf(SubStatus.class))
lookup.put(s.getCode(), s);
}
protected int code;
protected SubStatus(int code) {
this.code = code;
}
public int getCode() { return code; }
public static SubStatus get(int code) {
return lookup.get(code);
}
}
状态
public enum Status extends SubStatus
{
SKIPPED(-1),
COMPLETED(5);
private static final Map<Integer,Status> lookup
= new HashMap<Integer,Status>();
static {
for(Status s : EnumSet.allOf(Status.class))
lookup.put(s.getCode(), s);
}
private int code;
private Status(int code) {
this.code = code;
}
public int getCode() { return code; }
public static Status get(int code) {
return lookup.get(code);
}
}
最佳答案
静态 block 在第一次调用枚举时处理,但在创建所有枚举值之后。顺便说一句,您的代码将不起作用。 Java 枚举中没有继承。如果您需要这样的东西,请使用接口(interface)。
关于java - 这些类和子类静态 block 何时执行(对于枚举)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6827987/