对于什么时候使用,下面举四个例子:

1、一周有多少天?

7天。像这样固定不变的一组数据,如果我们的程序有需要用到这“7天”的相关信息,例如:发工资分为工作日和周末,可以考虑使用枚举类型。

2、太阳系有多少个行星?

8个。当我们需要计算每个行星的表面重力的时候,像这样我们需要用到固定不变的一组信息中的每一个元素携带了不同的信息,可以考虑使用枚举类型。

3、计算器中的基础运算符。

加减乘除。像这样我们需要用到固定不变的一组信息中的每一个元素都决定了不同的行为的时候,可以考虑使用枚举类型。

4、web请求返回的状态。

比如:error为-1,success为0,未登录为-9等可以设为枚举类型。

样例代码如下:

发工资

enum PayrollDay {MONDAY(PayType.WEEKDAY), TUESDAY(PayType.WEEKDAY), WEDNESDAY(PayType.WEEKDAY), THURSDAY(PayType.WEEKDAY),FRIDAY(PayType.WEEKDAY), SATURDAY(PayType.WEEKEND), SUNDAY(PayType.WEEKEND);private final PayType payType;PayrollDay(PayType payType) {this.payType = payType;}double pay(double hoursWorked, double payRate) {return payType.pay(hoursWorked, payRate);}private enum PayType {WEEKDAY {double overtimePay(double hours, double payRate) {//平时的加班工资return hours <= HOURS_PER_SHIFT ? 0 : (hours - HOURS_PER_SHIFT)* payRate / 2;}},WEEKEND {double overtimePay(double hours, double payRate) {//周末的加班工资return hours * payRate / 2;}};private static final int HOURS_PER_SHIFT = 8;abstract double overtimePay(double hrs, double payRate);double pay(double hoursWorked, double payRate) {//计算基本工资+加班工资double basePay = hoursWorked * payRate;return basePay + overtimePay(hoursWorked, payRate);}}
}

行星表面重力

public enum Planet {MERCURY(3.302e+23, 2.439e6), VENUS(4.869e+24, 6.052e6),
EARTH(5.975e+24,6.378e6), MARS(6.419e+23, 3.393e6), JUPITER(1.899e+27, 7.149e7),
SATURN(5.685e+26, 6.027e7), URANUS(8.683e+25, 2.556e7), NEPTUNE(1.024e+26,2.477e7);private final double mass; //质量private final double radius; //半径private final double surfaceGravity; //表面重力//引力常数private static final double G = 6.67300E-11;Planet(double mass, double radius) {this.mass = mass;this.radius = radius;surfaceGravity = G * mass / (radius * radius);}public double mass() {return mass;}public double radius() {return radius;}public double surfaceGravity() {return surfaceGravity;}//计算一定质量的物体在该星球上的重量。public double surfaceWeight(double mass) {return mass * surfaceGravity; // F = ma}
}

计算机

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;}},DIVIDE("/") {double apply(double x, double y) {return x / y;}};private final String symbol;//标志:+-*/Operation(String symbol) {this.symbol = symbol;}@Overridepublic String toString() {//重写前:PLUS、MINUS、TIMES、DIVIDEreturn symbol;//重写后:+-*/}abstract double apply(double x, double y);//缓存枚举常量private static final Map<String, Operation> stringToEnum = new HashMap<String, Operation>();static {for (Operation op : values())stringToEnum.put(op.toString(), op);}//通过"+-*/"可以获得枚举常量public static Operation fromString(String symbol) {return stringToEnum.get(symbol);}public static void main(String[] args) {double x = Double.parseDouble(args[0]);double y = Double.parseDouble(args[1]);for (Operation op : Operation.values())//枚举类型最明显的优点values(),即枚举System.out.printf("%f %s %f = %f%n", x, op, y, op.apply(x, y));}
}

状态码:

private enum CodeType {ERROR(-1, "失败"),SUCCESS(0, "成功");private int value;private String descript;CodeType(int value, String descript) {this.value = value;this.descript = descript;}@Overridepublic String toString() {return this.descript;}
}

为什么用枚举类型?我想主要有一下两点:

1、使用EnumClass.values(),我们所用的常量可以一一列举出来,即枚举。

2、每一个常量可以附带信息和行为,封装性好方便使用。

个人观点:第2条的优势远大于第1条,那为什么不叫常量类型呢?因为有枚举意义的常量第2条才有意义。

参考书籍:Effective Java(第2版)

如果对您有用的话赞一下呗!谢谢啦!

java开发——什么时候使用枚举类型?为什么要用枚举类型?相关推荐

  1. 19位整数 java_为什么阿里巴巴Java开发手册中强制要求超大整数禁止使用Long类型返回?...

    在阅读<阿里巴巴Java开发手册>时,发现有一条关于前后端超大整数返回的规约,具体内容如下: 这个问题在之前和前端联调的时候发生过,发现根据脚本 id 去审批的时候,状态没有变化,后来和前 ...

  2. 阿里巴巴 Java 开发手册 Java 开发手册(1.0.1)

    一.编程规约 (一) 命名规约 [强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反例: _name / __name / $Object / name_ / nam ...

  3. JAVA开发环境配置指南

    进入Java世界之前,我们需要铺一条"路",才能通往Java的世界并且尽情遨游,那么这条"路"是什么呢?是的,就是Java的开发环境.今天我们一起来学习Java ...

  4. 速读原著-Java核心技术(安装Java开发工具包)

    第 2 章 Java 程序设计环境 本章主要介绍如何安装 Java 开发工具包( JDK ) 以及如何编译和运行不同类型的程序:控制台程序. 图形化应用程序以及 applet.运行 JDK 工具的方法 ...

  5. Java开发笔记(五十六)利用枚举类型实现高级常量

    前面介绍了联合利用final和static可实现常量的定义,该方式用于简单的常量倒还凑合,要是用于复杂的.安全性高的常量,那就力不从心了.例如以下几种情况,final结合static的方式便缺乏应对之 ...

  6. java 枚举使用简书_java枚举类型使用和详解

    1.定义 An enum type is a special data type that enables for a variable to be a set of predefined const ...

  7. 为什么阿里巴巴Java开发手册中强制要求接口返回值不允许使用枚举?

    在阅读<阿里巴巴Java开发手册>时,发现有一条关于二方库依赖中接口返回值不允许使用枚举类型的规约,具体内容如下: 在谈论为什么之前先来科普下什么是二方库,二方库也称作二方包,一般指公司内 ...

  8. 浅谈在Java开发中的枚举的作用和用法

    2019独角兽企业重金招聘Python工程师标准>>> 在枚举出现之前,如果想要表示一组特定的离散值,往往使用一些常量.例如: [java] view plain copy pack ...

  9. 《Java开发手册》解读:大整数传输为何禁用Long类型?

    简介:最新发布的<Java开发手册(嵩山版)>增加了前后端规约,其中有一条:禁止服务端在超大整数下使用Long类型作为返回.这是为何?在实际开发中可能出现什么问题?本文从IEEE754浮点 ...

  10. Java开发笔记(三十三)字符包装类型

    正如整型int有对应的包装整型Integer那样,字符型char也有对应的包装字符型Character.初始化字符包装变量也有三种方式,分别是:直接用等号赋值.调用包装类型的valueOf方法.使用关 ...

最新文章

  1. 私有云管理-Windows Azure Pack
  2. 龙邱MPU9250传感器 | 使用ESP32 模块进行测试
  3. 追根究底之以不变求万变:利用SetCapture捕获鼠标
  4. C语言中字符串常用函数--strcat,strcpy
  5. 帮助理解GAN的一些补充内容
  6. Eureka客户端使用IP注册preferIpAddress和ip-address的区别
  7. winfrom水晶报表的创建
  8. js导出的xlsx无法打开_js-xlsx 导出表格至excel
  9. python生成泊松分布随机数_Python Numpy random.poisson() 泊松分布
  10. thumbnails 变黑_phpcms v9图片生成缩略图变成黑色解决方法
  11. xscan运行xscan_gui.exe无法打开
  12. 新手小白学JAVA IO流 File 字节流 字符流
  13. 关于AD中如何绘制原理图及其封装
  14. 赵小楼《天道》《遥远的救世主》解读(71)客观逻辑与离相的渊源
  15. 发布文章出现请勿使用默认标题
  16. 荣耀手表gs3和华为gt3 哪个好
  17. bsy代码学习--微信网页授权
  18. Solaris 迅速查找手册
  19. 西安交大计算机在线作业答案,西安交大电路在线作业及答案.docx
  20. nasa注册_“NASA”商标注册案例分析

热门文章

  1. 软件构造学习笔记ATD
  2. MXNet-图像分类(symbol版本)【附源码】
  3. 【控制系统数字仿真与CAD——实验报告】实验四:黄金分割法最优化PI调节器参数(文末附完整代码 + 实验结果)
  4. 复杂交通环境感知 | 基于深度学习的计算机视觉方法综述
  5. Linux 2.6内核配置说明(7----Bus options (PCI, PCMCIA, EISA, MCA, ISA)总线选项)
  6. mac book pro m1 java开发环境,工具汇总,idea,jdk,navicat,java,maven,mysql,rdm,redis下载安装
  7. #分治#poj 2083 Fractal
  8. 【pgsql】使用<foreach></foreach>处理数组或对象数组时的循环操作
  9. 个人登录空间 含登录注册功能
  10. Java SE基础(更新中)