0
点赞
收藏
分享

微信扫一扫

开发日常小结(9):如何在项目中定位枚举类的作用,并使用枚举类?-- 枚举类描述业务对象状态的实例详解


2018年4月11日


开发日常小结(9):如何在项目中定位枚举类的作用,并使用枚举类?-- 枚举类描述业务对象状态的实例详解_显式

欢迎扫二维码关注公众号,获取技术干货


枚举类在项目中,作为常量状态经常被使用,刚刚开始接触时还有点不适应,现在已经能够灵活的使用了。

【1】概念

  先看一个简单的枚举类。


package enumcase;

public enum SeasonEnum {
SPRING,SUMMER,FALL,WINTER;
}


  1. enum和class、interface的地位一样
  2. 使用enum定义的枚举类默认继承了java.lang.Enum,而不是继承Object类。枚举类可以实现一个或多个接口。
  3. 枚举类的所有实例都必须放在第一行展示,不需使用new 关键字,不需显式调用构造器。自动添加public static final修饰。
  4. 使用enum定义、非抽象的枚举类默认使用final修饰,不可以被继承。
  5. 枚举类的构造器只能是私有的。

 

【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;
}

}

 

以上是对枚举类的一个小结。

举报

相关推荐

0 条评论