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年出版,到现在已经将 ...
随机推荐
- 改变FileUpload文件上传控件的显示方式,选择文件后自动上传
一.Aspx页面: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="File ...
- python基础(四)集合
[集合特点] 1.天生去重.循环 2 关系测试 -交集,差集,并集,(反向差集,对称差集) list = [1,2,3,4,5,3,6]list_2 =[2,3,5,7,8]list=set(lis ...
- [c/c++] programming之路(12)、循环结构
一.求2n #include<stdio.h> void main(){ ; ; while(n--){ s*=; printf("%d,%d\n",s,n); } g ...
- npm 清理缓存
npm cache clean -f 有些时候npm下载资源出错,再次下载的时候可能因为之前错误的缓存造成一直下载不成功. 此时可以清一下npm的缓存,然后尝试重新下载
- BBU和RRU具体区别是 什么?
RRU是Remote Radio Unit 远端射频模块,BBU是Building Baseband Unit 室内基带处理单元.基带BBU集中放置在机房,RRU可安装至楼层,BBU与RRU之间采用光 ...
- bzoj 1835 base 基站选址 - 动态规划 - 线段树
题目传送门 需要高级权限的传送门 题目大意 有$n$个村庄坐落在一条直线上,第$i \ \ \ (i>1)$个村庄距离第$1$个村庄的距离为$D_i$.需要在这些村庄中建立不超过$K$个通讯基站 ...
- UVA1329 Corporative Network
思路 用带权并查集维护到根的距离即可 代码 #include <cstdio> #include <algorithm> #include <cstring> #i ...
- Learning-Python【7】:Python数据类型(3)—— 字典、集合
一.字典类型 1.用途:用来存放多个不同种类的值 2.定义方式:在{ }内用逗号分隔开多个key:value的元素,其中value可以是任意数据类型,而key的功能通常是用来描述value的,所以ke ...
- Linux——命令
1.pod2text # 功能输出处理对象(脚本)中的的=head1 ...=head1 ......=cut框架中的信息 2.date # 输出时间 eg: Sat Ju ...
- MapReduce :基于 FileInputFormat 的 mapper 数量控制
本篇分两部分,第一部分分析使用 java 提交 mapreduce 任务时对 mapper 数量的控制,第二部分分析使用 streaming 形式提交 mapreduce 任务时对 mapper 数量 ...