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 != ) {
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的更多相关文章
- Effective Java 第二版 Enum
/** * Effective Java 第二版 * 第30条:用enum代替int常量 */ import java.util.HashMap;import java.util.Map; publi ...
- 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 ...
- 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 ...
- Effective Java 第三版——30. 优先使用泛型方法
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Effective java 第2版 - 笔记(01) 单例(Singleton)的枚举(enum)实现
直接上代码: public enum Boss { INSTANCE; private String name; public void doSomeThing() { System.out.prin ...
- Java提供的enum详解
今天第一天看<<Effective Java>>,看了第六章的第一条就是全书的第30条--用enum代替int常量. 1.第一次知道原来enum也可以像class那样拥有成员函 ...
- Effective Java通俗理解(持续更新)
这篇博客是Java经典书籍<Effective Java(第二版)>的读书笔记,此书共有78条关于编写高质量Java代码的建议,我会试着逐一对其进行更为通俗易懂地讲解,故此篇博客的更新大约 ...
- Effective Java通俗理解(下)
Effective Java通俗理解(上) 第31条:用实例域代替序数 枚举类型有一个ordinal方法,它范围该常量的序数从0开始,不建议使用这个方法,因为这不能很好地对枚举进行维护,正确应该是利用 ...
- Effective Java 第三版——3. 使用私有构造方法或枚类实现Singleton属性
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
随机推荐
- 聊聊return false
最近在做一些关于视频切换的时候.由于是用a标签做的会有默认的跳转.这时候我就想到了,return flase.阻止默认行为,也达到了预期的效果.后来就详细查了查.让我们来看看 “return fals ...
- vue深入响应式原理
vue深入响应式原理 深入响应式原理 — Vue.jshttps://cn.vuejs.org/v2/guide/reactivity.html 注意:这里说的响应式不是bootsharp那种前端UI ...
- Redis学习-hash数据类型
hash 类型是string类型的field和value的映射表,或者说是一个string集合,适合存储对象,相比较而言,将一个对象类型存储在hash类型里要比存储在string类型里占用更少的内存空 ...
- three.js 3d三维网页代码加密的实现方法
http://www.jiamisoft.com/blog/17827-three-js-3dsanweiwangyejiami.html https://www.html5tricks.com/ta ...
- php 排列组合函数(无重复组合,可重复组合【全排列组合】)
<?php /** * 无重复排列組合 * @Author MAX * @DateTime 2018-09-07T16:28:40+0800 * @param Array $arr 需要排列組合 ...
- 2018.9.25 NOIP模拟赛
*注意:这套题目应版权方要求,不得公示题面. 从这里开始 Problem A XOR Problem B GCD Problem C SEG 表示十分怀疑出题人水平,C题数据和标程都是错的.有原题,差 ...
- 王之泰201771010131《面向对象程序设计(java)》第八周学习总结
第一部分:理论知识学习部分 第六章 第六章知识点主要分为1. 接口 2. lambda表达式 3. 内部类 4. 代理 1. 接口 1) Java为了克服单继承的缺点,Java使用了接口, 一个类可以 ...
- TTS 语音修复 ,缺少文件的,没注册类的
完美运行 http://bbs.nga.cn/read.php?tid=13292628&rand=492 Win7系统TTS修复-采用原生Win7提取绿色修复 一键自动修复,控制面板里有语音 ...
- 使用Flask部署机器学习模型
Introduction A lot of Machine Learning (ML) projects, amateur and professional, start with an aplomb ...
- 【Git】git error记录之 "unpacking the sent packfile failed on the remote"
错误信息: error: cannot open .git/FETCH_HEAD: Permission denied unpacking the sent packfile failed on th ...