Я пытаюсь определить базовый класс (SubStatus
) для Enum.
Когда блоки static
вызываются ниже? Если бы они были классами, а не перечислениями, я считаю, что они будут вызваны после вызова конструктора классов?
Но поскольку они Enum
с, разве это не больше похоже на static
классы для начала? Таким образом, возможно, статические блоки выполняются, когда контейнер загружает статические экземпляры?
Подстатус
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);
}
}