枚举
枚举类型其实归根结底也是普通的java类,因此在使用的时候也可以参考java类的一些处理方式,提高的代码的可复用性
如 下面关于数值操作的枚举类
public enum Operate { PLUS, MINUS, TIMES, DIVIDE; public double apply(double x, double y) { switch (this) { case PLUS: return x + y; case MINUS: return x - y; case TIMES: return x * y; case DIVIDE: return x / y; } throw new AssertionError("Unknown op:" + this); } }
这段代码虽然简单易懂,但是不好看。如果没有throw 字句,这个方法还会有编译错误,如果增加了新的枚举类型,确忘了增加case字句,那么就会抛出错误,运行就会失败。
如何解决?
将不同的行为与每个枚举常量关联起来:在枚举类型中声明一个抽象的apply方法,并在特定于常量的类主体中,用具体的方法覆盖每个常量的抽象apply方法。如下所示:
public enum Operate {
PLUS {
@Override
public double apply(double x, double y) {
return x + y;
};
},
MINUS {
@Override
public double apply(double x, double y) {
// TODO Auto-generated method stub
return x - y;
};
},
TIMES {
@Override
public double apply(double x, double y) {
return x * y;
};
},
DIVIDE
{
@Override
public double apply(double x, double y) {
return x / y;
};
};
public abstract double apply(double x, double y);
}
如果在增加新的枚举类型,你就不会忘记提供apply方法了,增加了复用性和安全性
此外,根据实际的需要,可以使用策略枚举(跟策略模式一样)

浙公网安备 33010602011771号