Open
Description
代码示例:
public enum StatusEnum {
CREATING(0),
PUBLISHED(1),
FINISHED(2);
private final int status;
StatusEnum(int status) {
this.status = status;
}
public int getStatus() {
return status;
}
private static final Map<Integer, StatusEnum> mapper = new HashMap<>(3);
static {
Arrays.stream(StatusEnum.values()).forEach(
statusEnum -> mapper.put(statusEnum.getStatus(), statusEnum)
);
}
/**
* 将status值转为枚举.
*/
public static StatusEnum fromStatus(final Integer status) {
if (status == null) {
return null;
}
return mapper.get(status);
}
}
枚举的实现原理是:
- 枚举值实际上是
public static final
的字段 - 枚举不允许在枚举值之前存在任何代码
- 对
fromStatus
的调用导致StatusEnum类加载,而类加载后枚举字段已被初始化完毕,所以这样是行得通的
Metadata
Metadata
Assignees
Labels
No labels