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方法了,增加了复用性和安全性

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

  • 相关阅读:
    开源分布式任务调度工具,和你一起记住生命中每一个重要的时刻
    寒假学习进度
    寒假学习进度
    寒假学习进度
    寒假学习进度
    js第三个阶段的面试题
    vue3保证你看懂watch和watchEffect的详细详细使用
    VMtool 安装与使用
    PHP 远程 debug
    一些有趣的编程名言
  • 原文地址:https://www.cnblogs.com/chenfei0801/p/3665213.html
Copyright © 2011-2022 走看看