zoukankan      html  css  js  c++  java
  • effective java——30使用enum

    1,

    枚举太阳系八大行星
    package com.enum30.www;
    
    public enum Planet {//枚举太阳系八大行星
         MERCURY(3.302e+23,2.439e6),
         VENUS(4.8e+24,6.0e6),
         EARTH(5.9e+24,6.3e6);
    
         private final double mass;    //kilogram
         private final double radius;  //meters
         private final double surfaceGravity; //In m/s^2
         private static final double G=6.67E-11;
    
        //consrtuctor
        Planet(double mass, double radius) {
            this.mass = mass;
            this.radius = radius;
            surfaceGravity=G*mass/(radius*radius);
        }
        public double surfaceWeight(double mass){
            return mass*surfaceGravity; //F=ma
        }
    
        public double getMass() {
            return mass;
        }
    
        public double getRadius() {
            return radius;
        }
    
        public double getSurfaceGravity() {
            return surfaceGravity;
        }
        public static void main(String[] args) {
            if (args.length != 1) {
                System.err.println("Usage: java Planet <earth_weight>");
                System.exit(-1);
            }
            double earthWeight=Double.parseDouble(args[0]);
            double mass=earthWeight/Planet.EARTH.getSurfaceGravity();
            for(Planet p:Planet.values()){
                System.out.printf("Weight on %s is %f%n", p, p.surfaceWeight(mass));
            }
        }
    }

    2.使用更为简洁的方式表达+ - * /

    package com.enum30demo2.www;
    
    import com.sun.org.apache.xpath.internal.operations.Minus;
    
    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;
            }},
            DEVIDE{double apply(double x,double y){
                return x/y;
            }};
            abstract double apply(double x,double y);
    }
    View Code

    3.使用更为安全的方式来执行工资计算,增大可读性,降低出错率

    package com;
    
    public enum PayrollDay {
        MONDAY(PayType.WEEKDAY),TUESDAY(PayType.WEEKDAY),
        WEDNESDAY(PayType.WEEKDAY),THURSDAY(PayType.WEEKDAY),
        FRIDAY(PayType.WEEKDAY),SATURDAY(PayType.WEEKEND),
        SUNDAY(PayType.WEEKEND);
            private  PayType payType;
    
    
         PayrollDay(PayType payType) {
            this.payType=payType;
        }
        double pay(double homeWork,double payRate){
            return payType.pay(homeWork,payRate);
        }
    
        private enum PayType{
                WEEKDAY{
                    double overtimePay(double hours,double payRate){
                        return hours<=HOURS_PER_SHIFT? 0:(hours-HOURS_PER_SHIFT)*payRate;
                    }
                },
                WEEKEND{
                    double overtimePay(double hours,double payRate){
                        return hours*payRate;
                    }
                };
                 private  final static int HOURS_PER_SHIFT=8;
                abstract double overtimePay(double hrs,double payRate);
                double pay(double homeWork,double payRate){
                    double basePay=(homeWork-HOURS_PER_SHIFT)*payRate;
                    return  basePay+overtimePay(homeWork,payRate);
                }
    
            }
    
        public static void main(String[] args) {
            double hours=8.8;
            double payRate=20.0;
            double total=MONDAY.pay(hours,payRate);
            System.out.println(total);
         }
    }
  • 相关阅读:
    用 Flask 来写个轻博客 (19) — 以 Bcrypt 密文存储账户信息与实现用户登陆表单
    用 Flask 来写个轻博客 (18) — 使用工厂模式来生成应用对象
    用 Flask 来写个轻博客 (18) — 使用工厂模式来生成应用对象
    用 Flask 来写个轻博客 (17) — MV(C)_应用蓝图来重构项目
    用 Flask 来写个轻博客 (17) — MV(C)_应用蓝图来重构项目
    Nginx详解八:Nginx基础篇之Nginx请求限制的配置语法与原理
    Nginx详解七:Nginx基础篇之Nginx官方模块
    Nginx详解六:Nginx基础篇之Nginx日志
    Nginx详解五:Nginx基础篇之HTTP请求
    Nginx详解四:Nginx基础篇之目录和配置语法
  • 原文地址:https://www.cnblogs.com/gaoqiaoliangjie/p/10177005.html
Copyright © 2011-2022 走看看