十四、枚举 enum
public enum WeekDay {
MONDAY("星期一"),
TUESDAY("星期二"),
WEDNESDAY("星期三");
private final String description;
WeekDay(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
我们先看这个枚举,反编译后
public final class com.dto.WeekDay extends Enum<com.dto.WeekDay> {//枚举继承 Enum,所以不能再继承其他类
public static final com.dto.WeekDay MONDAY;
public static final com.dto.WeekDay TUESDAY;
public static final com.dto.WeekDay WEDNESDAY;
private final java.lang.String description;
private static final com.dto.WeekDay[] $VALUES;
public static com.dto.WeekDay[] values();
public static com.dto.WeekDay valueOf(java.lang.String);//谨慎使用
private com.dto.WeekDay(java.lang.String);//构造器默认是 private
public java.lang.String getDescription();
private static com.dto.WeekDay[] $values();
static {};
}
一、编译后是 final class(不可被继承)
二、隐式 extends Enum< E>(不能再继承其他类)
三、构造器强制 private(外部不能 new)
四、实例必须显式声明是 public static final
五、实例集合在编译期固定 values() 可靠
因此不能加@Setter/@Data 这类破坏不可变性的注解
