Java枚举类型enum使用详解

java的Enum枚举类型终于在j2se1.5出现了。之前觉得它只不过是鸡肋而已,可有可无。毕竟这么多年来,没有它,大家不都过得很好吗?今日看《Thinking in Java》4th edition,里面有一句话“有时恰恰因为它,你才能够"优雅而干净"地解决问题。优雅与清晰很重要,正式它们区别了成功的解决方案与失败的解决方案。而失败的解决方案就是因为其他人无法理他。"使用Enum枚举类型,可以将以前笨拙的代码变得优雅简单?但是,我同时也在思考另外一个问题,使用新的技术,会不会给技术人员带来更多的负担呢?

"学习新版语言的一个危险就是疯狂使用新的语法结构"

先学习一下enum的简单应用,以下简洁的代码已经包括enum所提供的绝大部分功能。

1.enum的应用,包括定义,遍历,switch,enumset,enummap等

Java代码

[c-sharp] view plaincopyprint?

  1. import java.util.EnumMap;
  2. import java.util.EnumSet;
  3. public class EnumTest {
  4. // 定义一个enum枚举类型,包括两个实例ON,OFF
  5. public enum State {
  6. ON, OFF
  7. };
  8. // 测试函数
  9. public static void main(String[] args) {
  10. // 直接变量enum
  11. for (State s : State.values())
  12. System.out.println(s.name());
  13. // switch与enum的结合使用
  14. State switchState = State.OFF;
  15. switch (switchState) {
  16. case OFF:
  17. System.out.println("OFF");
  18. break;
  19. case ON:
  20. System.out.println("ON");
  21. break;
  22. }
  23. // EnumSet的使用
  24. EnumSet<State> stateSet = EnumSet.allOf(State.class);
  25. for (State s : stateSet) {
  26. System.out.println(s);
  27. }
  28. // EnumMap的使用
  29. EnumMap<State,String> stateMap = new EnumMap<State,String>(State.class);
  30. stateMap.put(State.ON, "is On");
  31. stateMap.put(State.OFF, "is off");
  32. for (State s : State.values()) {
  33. System.out.println(s.name() + ":" + stateMap.get(s));
  34. }
  35. }
  36. }

[c-sharp] view plaincopyprint?

  1. package com.aicent.test;
  2. public enum TestEnumMathod {
  3. // 为每个enum实例添加不同的实现方法
  4. SAMPLE1 {
  5. String getInfo() {
  6. return "SAMPLE1";
  7. }
  8. },
  9. SAMPLE2 {
  10. String getInfo() {
  11. return "SAMPLE2";
  12. }
  13. };
  14. abstract String getInfo();
  15. // 测试
  16. public static void main(String args[]) {
  17. for (TestEnumMathod method : values()) {
  18. System.out.println(method.getInfo());
  19. }
  20. }
  21. }

以下内容可能有些无聊,但绝对值得一窥
1.代码:
public class State {
public static final int ON = 1;
public static final Int OFF= 0;
}

有什么不好了,大家都这样用了很长时间了,没什么问题啊。
首先,它不是类型安全的。你必须确保是int
其次,你还要确保它的范围是0和1
最后,很多时候你打印出来的时候,你只看到 1 和0 ,

但其没有看到代码的人并不知道你的企图,抛弃你所有旧的public static final常量吧

2.可以创建一个enum类,把它看做一个普通的类。除了它不能继承其他类了。(java是单继承,它已经继承了Enum),
可以添加其他方法,覆盖它本身的方法

3.switch()参数可以使用enum了

4.values()方法是编译器插入到enum定义中的static方法,所以,当你将enum实例向上转型为父类Enum是,values()就不可访问了。解决办法:在Class中有一个getEnumConstants()方法,所以即便Enum接口中没有values()方法,我们仍然可以通过Class对象取得所有的enum实例

5.无法从enum继承子类,如果需要扩展enum中的元素,在一个接口的内部,创建实现该接口的枚举,以此将元素进行分组。达到将枚举元素进行分组。

6.使用EnumSet代替标志。enum要求其成员都是唯一的,但是enum中不能删除添加元素。

7.EnumMap的key是enum,value是任何其他Object对象。

8.enum允许程序员为eunm实例编写方法。所以可以为每个enum实例赋予各自不同的行为。

9.使用enum的职责链(Chain of Responsibility) .这个关系到设计模式的职责链模式。以多种不同的方法来解决一个问题。然后将他们链接在一起。当一个请求到来时,遍历这个链,直到链中的某个解决方案能够处理该请求。

10.使用enum的状态机

时间: 2024-08-05 10:55:02

Java枚举类型enum使用详解的相关文章

【转】java枚举类型enum的使用

原文网址:http://blog.csdn.net/wgw335363240/article/details/6359614 java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java 中定义的常量值不采用enmu 枚举类型,而采用public final static 类型来定义呢?以前我们都是采用这种方式定义的,很少采用enum 定义,所以也都没有注意过,面对突入起来的问题,还真有点不太清楚为什么有这样的定义.既然不明白就抽时间研究下吧. Java 中的枚举

java 枚举类型enum 的使用

java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java 中定义的常量值不采用enmu 枚举类型,而采用public final static 类型来定义呢?以前我们都是采用这种方式定义的,很少采用enum 定义,所以也都没有注意过,面对突入起来的问题,还真有点不太清楚为什么有这样的定义.既然不明白就抽时间研究下吧. Java 中的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型.要了解枚举类型,建议大家先

【转】掌握java枚举类型(enum type)

原文网址:http://iaiai.iteye.com/blog/1843553 1   背景 在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量.之前我们通常利用public final static 方法定义的代码如下,分别用1 表示春天,2表示夏天,3表示秋天,4表示冬天. Java代码   public class Season { public static final int SPRING = 1; public static final int 

深入理解Java枚举类型(enum)

[版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/71333103 出自[zejian的博客] 关联文章: 理解Java位运算 深入理解Java类型信息(Class对象)与反射机制 本篇主要是深入对Java中枚举类型进行分析,主要内容如下: 理解枚举类型 枚举的定义 枚举实现原理 枚举的常见方法 Enum抽象类常见方法 编译器生成的Values方法与ValueOf方法 枚举与Clas

Java枚举类型enum

枚举的语法 1.Enum的全称为enumeration,中文俗称枚举类,学过C/C++等语言的人,应该都对它略知一二. 但在Java语言规范中,是在JDK 5版本中才引入的,存放在 java.lang 包中.在Java版的Enum实质是语法糖,其声明方式如下: [代码1] package com.enumtest; public enum Color { RED,BLUE,BLACK,YELLOW,GREEN //注意这里可以没有分号 } enum是用来声明枚举的关键字,声明定义的类都隐含继承了

java 枚举类型enum

简单介绍 Java 中的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型.要了解枚举类型,建议大家先打开jdk 中的Enum 类简单读一下,这个类里面定义了很多protected 方法,比如构造函数,如果要使用这些方法我们可以把枚举类型定义到当前类中.每个枚举类型,都有自己的名字和顺序,当我们输出一个枚举类型的时候,会输入枚举类型的name ,具体可以参考下面的例子. 一.   通常定义常量方法 我们通常利用public final stat

Java枚举介绍及使用详解

在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的"数据集",春夏秋冬四个数据元素组成了四季的"数据集". 在java中如何更好的使用这些"数据集"呢?在jdk1.5之前我们或许会这样写: static class Grade { private Grade() { } public static final G

Java Enum用法详解

Java Enum用法详解 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强. enum Signal { GREEN, YE

hibernate enum映射详解

hibernate enum映射详解 在这里介绍注解的形式,如果想要了解XML配置的方式,可以自行查找相关资料. 例如以下Entity @Entity @Table(name = "t_user") public class User implements Serializable { /** * */ private static final long serialVersionUID = -9042615274714038279L; @Id @GeneratedValue(stra