美文网首页
第 34 条:用Enum代替int常量

第 34 条:用Enum代替int常量

作者: 综合楼 | 来源:发表于2021-05-16 12:36 被阅读0次
    用Enum代替int常量.jpeg
    public enum Planet {
        MERCURY(3.302e+23, 2.439e6),
        VENUS(4.869e+24, 6.052e6),
        EARTH(5.975e+24, 6.378e6),
        MARS(6.419e+23, 3.393e6),
        JUPITER(1.899e+27, 7.149e7),
        SATURN(5.685e+26, 6.027e7),
        URANUS(8.683e+25, 2.556e7),
        NEPTUNE(1.024e+26, 2.477e7);
        private final double mass;
        private final double radius;
        private final double surfaceGravity;
        
        private static final double G = 6.67300e-11;
        
        Planet(double mass, double radius) {
            this.mass = mass;
            this.radius = radius;
            surfaceGravity = G * mass / (radius * radius);
        }
        public double mass() {
            return mass;
        }
    
        public double radius() {
            return radius;
        }
    
        public double surfaceGravity() {
            return surfaceGravity;
        }
        public double surfaceWeight(double mass) {//F=ma
            return mass * surfaceGravity;
        }
    
    }
    
    
    import java.util.HashMap;
    import java.util.Map;
    
    public enum Operation {
        PLUS("+") {double apply(double x, double y) {return x + y;}},
        MINUS("-") {double apply(double x, double y) {return x - y;}},
        TIMES("*") {double apply(double x, double y) {return x - y;}},
        DIVIDE("/") {double apply(double x, double y) {return x - y;}};
        private final String symbol;
        Operation(String symbol) {
            this.symbol = symbol;
        }
        public String toString() {
            return symbol;
        }
        abstract double apply(double x, double y);
    
        private static final Map<String, Operation> stringToEnum = new HashMap<String, Operation>();
        static {
            for(Operation op : values())
                stringToEnum.put(op.toString(), op);
        }
        public static Operation fromString(String symbol) { return stringToEnum.get(symbol); }
    }
    
    enum PayrollDay {
        MONDAY(PayType.WEEKDAY),
        THESDAY(PayType.WEEKDAY),
        WEDNESDAY(PayType.WEEKDAY),
        THURSDAY(PayType.WEEKDAY),
        FRIDAY(PayType.WEEKDAY),
        SATURDAY(PayType.WEEKEND),
        SUNDAY(PayType.WEEKEND);
    
        private final PayType payType;
        PayrollDay(PayType payType) {
            this.payType = payType;
        }
        double pay(double hoursWorked, double payRate) {
            return payType.pay(hoursWorked, payRate);
        }
    
        private enum PayType {
            WEEKDAY {
                double overtimePay(double hours, double payRate) {
                    return hours <= HOURS_PER_SHIFT ? 0 :
                        (hours - HOURS_PER_SHIFT) * payRate * 2;
                }
            },
            WEEKEND {
                double overtimePay(double hours, double payRate) {
                    return hours * payRate / 2;
                }
            };
            private final static int HOURS_PER_SHIFT = 8;
            abstract double overtimePay(double hours, double Rate);
            double pay(double hoursWorked, double payRate) {
                double basePay = hoursWorked * payRate;
                return basePay + overtimePay(hoursWorked, payRate);
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:第 34 条:用Enum代替int常量

          本文链接:https://www.haomeiwen.com/subject/uoimdltx.html