zoukankan      html  css  js  c++  java
  • JAVA学习之枚举

    1、新建一个枚举类

    public enum Apple{
     FUJI,
     PIPPIN,
     GRANNY_SMITH
    }

    通过查看字节码,可以看到,枚举类的实现方式:

    1)继承自java.lang.Enum类。

    2)构造类为private

    3)枚举内的元素通过static域来引用

    2、在枚举类中添加任意的方法和域。

    public enum Apple {
        FUJI("red"),
        PIPPIN("green"),
        GRANNY_SMITH("orange");
    
        private String color;
    
        Apple(String color) {
            this.color = color;
        }
      public String getColor() {
      return color;
      }
    }

    在上面的类中:

    1)添加了域color

    2)创建了新的构造函数。

    3)增加了新的方法。

    3、在枚举中声明抽象方法,特定于常量的方法实现。

    public enum Operation {
    
        PLUS {
            @Override
            double apply(double x, double y) {
                return x+y;
            }
        },
        MINUS {
            @Override
            double apply(double x, double y) {
                return x-y;
            }
        },
        TIMES {
            @Override
            double apply(double x, double y) {
                return x*y;
            }
        },
        DIVIDE {
            @Override
            double apply(double x, double y) {
                return x/y;
            }
        };
    
        abstract double apply(double x,double y);
    }

    针对每个枚举值,分别定义不同的方法实现。

    4、策略枚举

    public enum PayrollDay {
        MONDAY(PayType.WEEDAY),
        TUESDAY(PayType.WEEDAY),
        WEDNESDAY(PayType.WEEDAY),
        THURSDAY(PayType.WEEDAY),
        FRIDAY(PayType.WEEDAY),
        SATURDAY(PayType.WEEKEND),
        SUNDAY(PayType.WEEKEND);
    
        private final PayType payType;
    
        PayrollDay(PayType payType) {
            this.payType = payType;
        }
    
        double pay(double houresWorked, double payRate){
            return payType.pay(houresWorked, payRate);
        }
    
        private enum PayType{
            WEEDAY {
                @Override
                double overtimePay(double hrs, double payRate) {
                    return hrs<=HOURS_PER_SHIFT ? 0 :
                            (hrs - HOURS_PER_SHIFT) * payRate / 2;
                }
            },
            WEEKEND {
                @Override
                double overtimePay(double hrs, double payRate) {
                    return hrs * payRate / 2;
                }
            };
    
            private static final int HOURS_PER_SHIFT=8;
    
            abstract double overtimePay(double hrs, double payRate);
    
            double pay(double hoursWorked, double payRate){
                double basePay = hoursWorked * payRate;
                return basePay + overtimePay(hoursWorked,payRate);
            }
        }
    
    }

    针对常量如果可以进行分类,则可以定义一个策略枚举,来减少样板代码

  • 相关阅读:
    oracle创建表空间、用户
    even事件 浏览器兼容性
    java学习笔记01数据类型
    oracle行转列、列转行
    C#Form窗体通过代码改变尺寸
    JavaScript网页客户端系统文件操作FileSystemObject 对象
    主题:javascript进阶之变量篇转载http://www.javaeye.com/topic/19506
    javascript attachEvent和addEventListener 使用方法http://www.diybl.com/course/1_web/javascript/jsjs/20071226/94592.html
    动态添加表格问题
    javascript 打开新窗口
  • 原文地址:https://www.cnblogs.com/xuelu/p/4828350.html
Copyright © 2011-2022 走看看