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年出版,到现在已经将 ...
随机推荐
- Python 第五阶段 学习记录之----ORM
ORM: orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为了 ...
- mysql 分组取最新的一条记录(整条记录)
方法:mysql取分组后最新的一条记录,下面两种方法.一种是先筛选 出最大和最新的时间,在连表查询.一种是先排序,然后在次分组查询(默认第一条),就是最新的一条数据了 #select * from ...
- 转:C#使用Dotfuscator混淆代码的加密方法
Author:flymorn Source:flymornCategories:C#编程 PostTime:2011-9-16 1:04:49 正 文: C#编写的代码如果不进行一定程度的混淆和加 ...
- vue axios使用form-data的形式提交数据的问题
vue axios使用form-data的形式提交数据vue axios request payload form data由于axios默认发送数据时,数据格式是Request Payload,而并 ...
- 第六节 DOM操作应用
创建.插入和删除元素 创建DOM元素: createElement(标签名); //创建一个节点 appendChild(节点); //追加一个节点 例如:document.body.appendCh ...
- Scala--reduceLeft
reduceLeft神语法 val a = Array(20, 12, 6, 15, 2, 9) 1 2 3 4 5 6 7 8 scala> a.reduceLeft(_ + _) // 数 ...
- 常用模块 time sys os json pickle
# import time # print(time.time()) #秒数 # print('开始下载') # time.sleep(2) # print('下载完成') # print(time. ...
- Python sqlalchemy orm 多对多外键关联
多对多外键关联 注:使用三张表进行对应关联 实现代码: # 创建3个表 配置外键关联 # 调用Column创建字段 加类型 from sqlalchemy import Table, Column, ...
- [CodeForces - 463B] Caisa and Pylons
题目链接:http://codeforces.com/problemset/problem/463/B 求个最大值 AC代码: #include<cstdio> #include<c ...
- Configuration in ASP.NET Core(未完,待续)
Configuration in ASP.NET Core App configuration in ASP.NET Core is based on key-value pairs establis ...