枚举的好处:

1. 类型安全性

2.使用方便性

public class EnumDemo {     enum Color{     RED(3),BLUE(5),BLACK(8),YELLOW(13),GREEN(28);          private int colorValue;     private Color(int rv){     this.colorValue=rv;       }   private int getColorValue(){return colorValue;}   private int value(){return ordinal()+1;}
}          public static void main(String[] args) { for(Color s : Color.values()) {     //enum的values()返回一个数组,这里就是Seasons[]     System.out.println(s.value()+":"+s.name()+"="+s.getColorValue());     }     }
}   

output:

1:RED=3
2:BLUE=5
3:BLACK=8
4:YELLOW=13
5:GREEN=28

其中,

    /*** Returns the ordinal of this enumeration constant (its position* in its enum declaration, where the initial constant is assigned* an ordinal of zero).** Most programmers will have no use for this method.  It is* designed for use by sophisticated enum-based data structures, such* as {@link java.util.EnumSet} and {@link java.util.EnumMap}.** @return the ordinal of this enumeration constant*/public final int ordinal() {return ordinal;}

EnumMap是专门为枚举类型量身定做的Map实现。虽然使用其它的Map实现(如HashMap)也能完成枚举类型实例到值得映射,但是使用EnumMap会更加高效:它只能接收同一枚举类型的实例作为键值,并且由于枚举类型实例的数量相对固定并且有限,所以EnumMap使用数组来存放与枚举类型对应的值。这使得EnumMap的效率非常高。

import java.util.*;public enum Phase {SOLID, LIQUID, GAS;public enum Transition {MELT(SOLID, LIQUID), FREEZE(LIQUID, SOLID), BOIL(LIQUID, GAS), CONDENSE(GAS, LIQUID), SUBLIME(SOLID, GAS), DEPOSIT(GAS, SOLID);private final Phase src;private final Phase dst;Transition(Phase src, Phase dst) {this.src = src;this.dst = dst;}private static final Map<Phase, Map<Phase, Transition>> m = new EnumMap<Phase, Map<Phase, Transition>>(Phase.class);static {for (Phase p : Phase.values())m.put(p, new EnumMap<Phase, Transition>(Phase.class));for (Transition trans : Transition.values())m.get(trans.src).put(trans.dst, trans);}public static Transition from(Phase src, Phase dst) {return m.get(src).get(dst);}}public static void main(String[] args) {for (Phase src : Phase.values())for (Phase dst : Phase.values())if (src != dst)System.out.printf("%s to %s : %s %n", src, dst,Transition.from(src, dst));}
}

转载于:https://www.cnblogs.com/davidwang456/p/6138717.html

用枚举enum替代int常量相关推荐

  1. 枚举——用enum代替int常量

    枚举类型(enum type) 是指一组固定的常量组成合法值的类型,例如一年中的季节.太阳系中的行星或者一副牌中的花色. int枚举模式的缺点 在我们平常的开发中,为表示同种类型的不同种类,经常的做法 ...

  2. Effective Java~34. 用enum 代替 int 常量

    在将枚举类型添加到该语言之前,表示枚举类型的常见模式是声明一组名为 int 的常量,每个类型的成员都有一个常量: // The int enum pattern - severely deficien ...

  3. Effective Java之用enum代替int常量(三十)

    1.Int枚举常量 public class mytest {public static final int num_one = 1;public static final int num_two = ...

  4. Java 枚举enum的用法

    在 JDK 1.5 之前没有枚举类型,那时候一般用接口常量来替代.而使用 Java 枚举类型 enum 可以更贴近地表示这种常量. 文章目录 前言 一.ENUM 二.enum的常用七种方法 1.常量 ...

  5. Java枚举enum以及应用:枚举实现单例模式

    枚举作为一个常规的语言概念,一直到Java5才诞生不得不说有点奇怪,以至于到现在为止很多程序员仍然更喜欢用static final的形式去命名常量而不使用,一般情况下,Java程序员用这种方式去实现枚 ...

  6. 用枚举enum实现单例

    [README] 1,effectivejava 讲到使用 枚举类实现单例的例子,非常好用: 2,好处如下: 不用定义私有构造器: 不用定义获取单例的方法,如 getInstance() :通过 枚举 ...

  7. Java、Mysql、MyBatis 中枚举 enum 的使用

    From: https://yulaiz.com/java-mysql-enum/ Java 和 MySql 中都有枚举的概念,合理的使用枚举,可以让代码阅读和数据库数据查询更加直观.高效.那么我们怎 ...

  8. c++ enum 给定类型_C++11作用域内枚举enum

    在C++11之前的枚举(enum),是没有办法两个枚举(enum)内有相同枚举名的.如果还不知道C++中枚举(enum)是什么,可以看这篇:枚举enum 如:苹果和桔子都有大,中,小.写个代码来说明下 ...

  9. 枚举ENUM的tostring() valueof()name()和values()用法

    从jdk5出现了枚举类后,定义一些字典值可以使用枚举类型; 枚举常用的方法是values():对枚举中的常量值进行遍历; valueof(String name) :根据名称获取枚举类中定义的常量值; ...

最新文章

  1. 动态加载的html没有js效果,JS利用html5实现loadding动态加载效果代码实例
  2. CIO的职业之路应该朝向何方 做主角还是配角?
  3. CentOS下一键安装GitLab
  4. Linux安装telnet
  5. linux下运行gnuplot,Gnuplot Linux版下载
  6. JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(推荐七)
  7. mysql 查询slow log状态,MySQL开启慢查询日志log-slow-queries的方法
  8. 2018先知白帽大会 | 议题解读
  9. HDU-3280 Equal Sum Partitions
  10. Scala隐式转换动态丰富类库功能
  11. UFLDL教程: Exercise: Implement deep networks for digit classification
  12. docker实战系列之搭建rabbitmq
  13. php 点对点,浅析点对点(End-to-End)的场景文字识别
  14. html css布局 慕课,html5和css3学习 Header实现CSS的布局
  15. 机器人学 —— 机器人感知(Mapping)
  16. 图解 Android Handler 线程消息机制
  17. 名为 cursor_jinserted 的游标不存在_一个工程师必须了解的测量常识,你不知道怎么行...
  18. mapper接口中的方法,example实例解析
  19. ubuntu屏幕截图工具
  20. 移动硬盘插入笔记本会后,右下角有图标显示,但是我的电脑里面不显示,导致打不开硬盘

热门文章

  1. 惠普打印机节能环保认证证书_学生在家学习 入门级喷墨打印机 300元-500元档
  2. php调用其它控制器,TP框架控制器里面怎么调用另一个控制器的代码
  3. 复杂查询练习_《从零学会SQL:简单查询》第二关 简单查询
  4. python实现文件共享_改进的一行Python实现文件共享--支持并发
  5. conda create出现连接问题_在dockerfile中运行conda更新时出现问题
  6. xampp php源码的路径,php – XAMPP中的根路径
  7. 文本编辑器添加文本编辑区
  8. ios android 内存不足,怎样解决手机内存不足?iOS系统可以试试这些方法
  9. (调用系统电话薄)运行时权限的基本使用
  10. tf.arg_max