2018年4月11日
枚举类在项目中,作为常量状态经常被使用,刚刚开始接触时还有点不适应,现在已经能够灵活的使用了。
【1】概念
先看一个简单的枚举类。
package enumcase;
public enum SeasonEnum {
SPRING,SUMMER,FALL,WINTER;
}
- enum和class、interface的地位一样
- 使用enum定义的枚举类默认继承了java.lang.Enum,而不是继承Object类。枚举类可以实现一个或多个接口。
- 枚举类的所有实例都必须放在第一行展示,不需使用new 关键字,不需显式调用构造器。自动添加public static final修饰。
- 使用enum定义、非抽象的枚举类默认使用final修饰,不可以被继承。
- 枚举类的构造器只能是私有的。
【2】枚举类使用
枚举类内也可以定义属性和方法,可是是静态的和非静态的。
package enumcase;
public enum SeasonEnum {
SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天");
private final String name;
private SeasonEnum(String name)
{
this.name = name;
}
public String getName() {
return name;
}
}
实际上在第一行写枚举类实例的时候,默认是调用了构造器的,所以此处需要传入参数,因为没有显式申明无参构造器,只能调用有参数的构造器。
构造器需定义成私有的,这样就不能在别处申明此类的对象了。枚举类通常应该设计成不可变类,它的Field不应该被改变,这样会更安全,而且代码更加简洁。所以我们将Field用private final修饰。
【3】Demo1 - 记录状态
public enum publishActionType {
TO_ADD_PUBLISH(0),
TO_MODIFY_PUBLISH(1)
;
private int code;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
publishActionType(int code){
this.code = code;
}
}
【4】Demo2 -- 某类型
public enum WorldChannelType {
SYSTEM(1, "系统"),
CHAT(2, "聊天");
private int code;
private String name;
private WorldChannelType(int code, String name){
this.code = code;
this.name = name;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
【5】Demo3 -- 跳转类型
public enum TurnUrlEnum {
NONE(0,"无跳转","None",1),
GameWeb(1,"跳转外部网页链接","GameWeb",1),
Mall_SKIN(2,"跳转到商城购买皮肤","Mall",1),
Mall_GOLD_COIN(3,"跳转到商城购买金币","Mall",1),
Mall_DISMONDS(4,"跳转到商城购买钻石","Mall",1),
Mall_PROP(5,"跳转到商城购买道具","Mall",1),
ACTIVITY_LAYER(6,"跳转到活动页面","ACTIVITY_LAYER",1),
;
private int urlTypeId; //对应excel表的xmlId
private String nameCh; //名称
private String nameEng; //出售价格
private int permission; //选择许可(0:不许可;1:开放)
public static TurnUrlEnum getEnum(int id){
for(TurnUrlEnum e : TurnUrlEnum.values()){
if(e.getUrlTypeId() == id) {
return e;
}
}
return NONE;
}
public int getUrlTypeId() {
return urlTypeId;
}
public void setUrlTypeId(int urlTypeId) {
this.urlTypeId = urlTypeId;
}
public String getNameCh() {
return nameCh;
}
public void setNameCh(String nameCh) {
this.nameCh = nameCh;
}
public String getNameEng() {
return nameEng;
}
public void setNameEng(String nameEng) {
this.nameEng = nameEng;
}
public int getPermission() {
return permission;
}
public void setPermission(int permission) {
this.permission = permission;
}
private TurnUrlEnum(int urlTypeId, String nameCh, String nameEng,
int permission) {
this.urlTypeId = urlTypeId;
this.nameCh = nameCh;
this.nameEng = nameEng;
this.permission = permission;
}
}
以上是对枚举类的一个小结。