枚举

枚举类型其实归根结底也是普通的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方法了,增加了复用性和安全性

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

 

 

 

 

 

posted @ 2014-04-14 23:19  chenfei0801  阅读(271)  评论(0编辑  收藏  举报