zoukankan      html  css  js  c++  java
  • 枚举

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

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

  • 相关阅读:
    Ubuntu下录音机程序的使用
    Bash中的数学计算
    Bash中的数学扩展
    Bash的命令替换
    top的用法
    VirtualBox的快照功能
    格式化输出和printf命令
    read命令读取用户输入
    Bash的作业控制
    Codeforces Round #455 (Div. 2)
  • 原文地址:https://www.cnblogs.com/chenfei0801/p/3665213.html
Copyright © 2011-2022 走看看