枚举类型其实归根结底也是普通的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方法。如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 |
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方法了,增加了复用性和安全性
此外,根据实际的需要,可以使用策略枚举(跟策略模式一样)
原文:http://www.cnblogs.com/chenfei0801/p/3665213.html