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);
         }
    }
  • 相关阅读:
    使用remove_constants工具查看Oracle是否使用绑定变量
    v$sqlarea,v$sql,v$sqltext这三个视图提供的sql语句有什么区别?
    Cardinality (基数)
    分区表操作
    递归连接查询
    解决Android应用安装快完毕时提示签名冲突,android签名文件生成(转)
    Oracle的Numer类型与C,C#数据类型对应关系
    Spring学习(四)——使用Spring JDBC访问数据库
    Spring学习(三)——集成 Velocity
    Spring学习(二)——使用Gradle构建一个简单的Spring MVC Web应用程序
  • 原文地址:https://www.cnblogs.com/gaoqiaoliangjie/p/10177005.html
Copyright © 2011-2022 走看看