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 != ) {
System.err.println("Usage: java Planet <earth_weight>");
System.exit(-);
}
double earthWeight=Double.parseDouble(args[]);
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);
}

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? :(hours-HOURS_PER_SHIFT)*payRate;
}
},
WEEKEND{
double overtimePay(double hours,double payRate){
return hours*payRate;
}
};
private final static int HOURS_PER_SHIFT=;
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);
}
}

effective java——30使用enum的更多相关文章

  1. Effective Java 第二版 Enum

    /** * Effective Java 第二版 * 第30条:用enum代替int常量 */ import java.util.HashMap;import java.util.Map; publi ...

  2. Effective Java 30 Use Enums instead of int constants

    Enumerated type is a type whose legal values consist of a fixed set of constants, such as the season ...

  3. Effective Java Index

    Hi guys, I am happy to tell you that I am moving to the open source world. And Java is the 1st langu ...

  4. Effective Java 第三版——30. 优先使用泛型方法

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  5. Effective java 第2版 - 笔记(01) 单例(Singleton)的枚举(enum)实现

    直接上代码: public enum Boss { INSTANCE; private String name; public void doSomeThing() { System.out.prin ...

  6. Java提供的enum详解

    今天第一天看<<Effective Java>>,看了第六章的第一条就是全书的第30条--用enum代替int常量. 1.第一次知道原来enum也可以像class那样拥有成员函 ...

  7. Effective Java通俗理解(持续更新)

    这篇博客是Java经典书籍<Effective Java(第二版)>的读书笔记,此书共有78条关于编写高质量Java代码的建议,我会试着逐一对其进行更为通俗易懂地讲解,故此篇博客的更新大约 ...

  8. Effective Java通俗理解(下)

    Effective Java通俗理解(上) 第31条:用实例域代替序数 枚举类型有一个ordinal方法,它范围该常量的序数从0开始,不建议使用这个方法,因为这不能很好地对枚举进行维护,正确应该是利用 ...

  9. Effective Java 第三版——3. 使用私有构造方法或枚类实现Singleton属性

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

随机推荐

  1. https://scrapingclub.com/exercise/basic_captcha/

    def parse(self, response): # set_cookies = response.headers.getlist("set-cookie").decode(& ...

  2. PriorityQueue 源码分析

    public boolean hasNext() { return cursor < size || (forgetMeNot != null && !forgetMeNot.i ...

  3. Linux 跟踪连接netfilter 调优

    Netfilter介绍 linux内核中的netfilter是一款强大的基于状态的防火墙,具有连接跟踪(conntrack)的实现.conntrack是netfilter的核心,许多增强的功能,例如, ...

  4. kvm日常维护

    1.列出物理机器上安装的虚拟[root@localhost ~]# virsh list --all Id Name State------------------------------------ ...

  5. msf下的各种生成payload命令

    Often one of the most useful (and to the beginner underrated) abilities of Metasploit is the msfpayl ...

  6. linux --- 9. docker 容器 和 rabbitmq 队列

    一. docker 容器 1.docker是什么? .linux下容器技术有很多,docker是做的最杰出的一款 .docker能够支撑阿里双十一,京东618的业务,说明,性能,安全性不得差 .doc ...

  7. Spring错误——Spring 注解——factory-bean reference points back to the same bean definition

    背景:学习Spring,在使用注解@Bean的name属性配置<bean>实例时,不能注册实例成功 报错 WARNING: Exception encountered during con ...

  8. Pandas之索引

    Pandas的标签处理需要分成多种情况来处理,Series和DataFrame根据标签索引数据的操作方法是不同的,单列索引和双列索引的操作方法也是不同的. 单列索引 In [2]: import pa ...

  9. centos linux查看硬盘型号

    [root@]# smartctl --all /dev/sdasmartctl 6.5 2016-05-07 r4318 [x86_64-linux-3.10.0-957.1.3.el7.x86_6 ...

  10. PHP深入浅出之命名空间(Namespace)的使用详解

    对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只 ...