枚举类型其实归根结底也是普通的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方法了,增加了复用性和安全性
此外,根据实际的需要,可以使用策略枚举(跟策略模式一样)