6.30 使用枚举类代替常量

JDK5开始支持枚举功能,以下枚举类:

 

public enum State {
	ON,OFF;
}

 

 

枚举类State不能继承其它类,也不能被其它类继承,并且不能使用new创建State类型的对象。其实State可视为java.lang.Enum的子类,其中每一个枚举常量可视为State类型的实例,以下代码仅供理解:

 

public class State {
	public static final State ON=new State();
	public static final State OFF=new State();
	
	private State(){}
}

 

 

State也可定义构造函数,如下:

public enum State {
	ON("1","is on"),
	OFF("2","is off");
	
	private final String key;
	private final String value;
	
	private State(String key,String value){
		this.key=key;
		this.value=value;
	}
	
	public String getKey(){
		return key;
	}
	
	public String getValue(){
		return value;
	}
} 

 

编译器会给State类插入values(),调用此方法可以获取所有的枚举量。也可以通过反射获取所有的枚举量,如下:

		State[] states=State.values();//values()由编译器插入
		State[] states2=State.class.getEnumConstants();//通过反射获取枚举量
		
		Assert.assertEquals(states.length, states2.length);

 

编译器还会给State插入valueOf(),此方法用于根据枚举量名称获取枚举量:

		State state=State.valueOf("ON");//valueOf()由编译器插入		
		State state2=State.valueOf(State.class, "ON");//valueOf()继承于Enum类?
		Assert.assertEquals(state, state2);

 

此外可使用java.util.EnumSet和java.util.EnumMap用于操作枚举量

 

枚举类可定义抽象方法,每个枚举量必须实现此抽象方法,如下:

注:利用此方式可实现策略设计模式,原书有一个更好的工资支付的例子

public enum Operation {
	PLUS { double apply(double x, double y){return x + y;} },
	MINUS { double apply(double x, double y){return x - y;} },
	TIMES { double apply(double x, double y){return x * y;} },
	DIVIDE { double apply(double x, double y){return x / y;} };
	
	//抽象方法,每个枚举量必须实现此方法
	abstract double apply(double x, double y);
}

 

与使用int类型的常量相比,使用枚举性能较低(因为需要创建枚举量对象),在移动设备上应考虑此问题

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值