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. bzoj1911 [Apio2010]特别行动队commando

    题目链接 斜率优化 #include<cstdio> #include<cstdlib> #include<string> #include<cstring& ...

  2. css3 二维码 添加 扫描特效

    <section data-role="paragraph" class="_135editor" style="border: 0px non ...

  3. Docker Swarm 创建overlay网络

    Docker Swarm 创建overlay网络 环境: 系统:Centos 7.4 x64 应用版本:Docker 18.09.0 管理节点:192.168.1.79 工作节点:192.168.1. ...

  4. Oracle 11gR2 用户重命名(rename user)

      Oracle 11.2.0.2里新增了一个新特性——用户重命名(Rename User),在这个版本之前要想重命名用户,需要按用户导出,再fromuser touser(imp)或remap_sc ...

  5. 【题解】JSOIWC2019 Round 5

    题面: 题解: T1: 算法1: 枚举每个灯塔的方向,并分别判断是否有解.时间复杂度O(K*4^K). 预计得分:50-70分 算法2: 不难发现,当k≥4的时候一定有解,将最靠左的两个下面的朝右上. ...

  6. 使用js方法时,调用的方法名明明一致,但就是不管用,解决

    前提:代码全部写对 问题:调用的方法名明明一致,但就是不管用 举例:写了个function delete(){}方法, 点击调用delete方法,onclik="delete()" ...

  7. jQuery实现淘宝购物车小组件

    我爱撸码,撸码使我感到快乐! 大家好,我是Counter,本章将实现淘宝购物车小组件, 用原生js可以实现吗,当然可以,可是就是任性一回,就是想用jQuery 来实现下.HTML代码不多才4行,CSS ...

  8. 洛谷 P2915 【[USACO08NOV]奶牛混合起来Mixed Up Cows】

    类似于n皇后的思想,只要把dfs表示放置情况的数字压缩成一个整数,就能实现记忆化搜索了. 一些有关集合的操作: {i}在集合S内:S&(1<<i)==1: 将{i}加入集合S:S= ...

  9. Jquery动画效果(混合)

    1.图片随滚动条滚动 代码: var menuYloc = $("#right").offset().top; $(window).scroll(function () { var ...

  10. read_csv 的 names 和 index_col 参数作用