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

2018年4月11日

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

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

}


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

猜你喜欢

转载自blog.csdn.net/qq_29166327/article/details/79893438
今日推荐