java - 这些类和子类静态 block 何时执行(对于枚举)?

标签 java static enums execution

我正在尝试为枚举定义一个基类 (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/

相关文章:

Java:枚举与整数

c# - 从 String 解析枚举不起作用

java - 创建一个临时文件,然后使用 FTP (Java webapp) 上传

java - 引用持久性并传递可变数量的数组

java - PHP curl 问题 - 使用 @RequestParameter 参数的 Spring 3 REST PUT/POST 方法

c++ - c 和 c++ 之间关键字 static 的不同含义是什么?

c++ - 类(class)和类(class)助手

c - 将枚举值设置为 4 字节字符串 - 为什么?

java - 具有不可变值的 ConcurrentHashMap - 同步替换?

java - 通过代理连接到 FTPS