首页 > 其他 > 详细

枚举

时间:2014-04-15 21:37:06      阅读:541      评论:0      收藏:0      [点我收藏+]

枚举类型其实归根结底也是普通的java类,因此在使用的时候也可以参考java类的一些处理方式,提高的代码的可复用性

如 下面关于数值操作的枚举类

             

bubuko.com,布布扣
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);
    }

}
bubuko.com,布布扣

      这段代码虽然简单易懂,但是不好看。如果没有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方法了,增加了复用性和安全性

此外,根据实际的需要,可以使用策略枚举(跟策略模式一样)

 

 

 

 

 

枚举,布布扣,bubuko.com

枚举

原文:http://www.cnblogs.com/chenfei0801/p/3665213.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!