• 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);
         }
    }
  • 相关阅读:
    redis/memcached可视化客户端工具TreeNMS
    Navicat Mysql快捷键
    mysql全文索引之模糊查询
    Discuz网警过滤关键词库
    php中的implements 使用详解
    PHP 依赖注入和控制反转再谈(二)
    php 中的closure用法
    C# 反射(Reflection)技术
    Oracle pl/sql编程值控制结构
    Oracle PL/SQL编程之变量
  • 原文地址:https://www.cnblogs.com/gaoqiaoliangjie/p/10177005.html
Copyright © 2020-2023  润新知