`
janeky
  • 浏览: 365967 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

高阶Java-Java枚举类型 enum 应用详解

阅读更多

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

 

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

 

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

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

 

package com.janeky.enumtest;
import java.util.EnumMap;
import java.util.EnumSet;

/**
 * Java枚举类型enum使用详解
 * @version 2009/9/5
 * @author janeky
 * @mail rojaneky@gmail.com
 *
 */
public class EnumTest {

	//定义一个enum枚举类型,包括两个实例ON,OFF
	public enum State {
		ON, OFF
	};

	//测试函数
	public static void main(String[] args) {
		//直接变量enum
		for (State s : State.values())
			System.out.println(s.name());

		//switch与enum的结合使用
		State switchState = State.OFF;
		switch (switchState) {
		case OFF:
			System.out.println("OFF");
			break;
		case ON:
			System.out.println("ON");
			break;
		}

		//EnumSet的使用
		EnumSet<State> stateSet = EnumSet.allOf(State.class);
		for (State s : stateSet) {
			System.out.println(s);
		}

		//EnumMap的使用
		EnumMap<State, String> stateMap = new EnumMap<State, String>(
				State.class);
		stateMap.put(State.ON, "is On");
		stateMap.put(State.OFF, "is off");
		for (State s : State.values()) {
			System.out.println(s.name() + ":" + stateMap.get(s));
		}
	}

}


 

 

为每个enum实例定义不同的方法

package com.janeky.enumtest;

public enum TestEnumMathod {
	//为每个enum实例添加不同的实现方法
	SAMPLE1 {
		String getInfo() {
			return "SAMPLE1";
		}
	},
	SAMPLE2{
		String getInfo()
		{
			return "SAMPLE2";
		}
	};
	abstract String getInfo();
	
	//测试
	public static void main(String args[])
	{
		for(TestEnumMathod method:values())
		{
			System.out.println(method.getInfo());
		}
	}
	
}

 


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

}

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

但其没有看到代码的人并不知道你的企图
so,抛弃你所有旧的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的状态机

 

11.使用enum多路分发

 

-------------------------
参考资料
《Thinking in Java》4th edition
sun ibm developer

附件是源码 


 

2
0
分享到:
评论

相关推荐

    Java ---- enum --- 枚举类案例

    Java ---- enum --- 枚举类案例

    Java枚举类型Enum的用法

    Java枚举类型(Enum)是Java SE 5.0引入的一种新的数据类型,它为开发者提供了更为强大且安全的方式来表示一组常量。枚举在Java中不仅是一个类,还是一种特殊的类型,允许我们定义自己的常量集合。接下来,我们将...

    Java中的枚举类型Enum示例源代码

    Java中的枚举类型`Enum`是面向对象编程中一种强大的工具,它允许程序员定义自己的常量集合。在Java中,枚举类型不是简单的常量数组,而是一种完整的类,具有类的所有特性,如方法、构造函数和继承。下面将详细探讨`...

    java枚举类型enum的使用

    ### Java 枚举类型 enum 的使用详解 #### 一、枚举类型概述 在 Java 中,枚举(enum)是一种特殊的类,它被用来表示一组固定的常量值。枚举类型自 JDK 1.5 开始引入,为开发者提供了一种更加安全、简洁的方式来...

    Java SE程序 Enum枚举类

    Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类...

    枚举语句enum用法详解

    在C#中,枚举类型是基于整数类型的,通常使用`enum`关键字来声明。例如: ```csharp enum Colors { Red, Green, Blue } ``` 上述代码定义了一个名为`Colors`的枚举,它有三个成员:`Red`、`Green`和`Blue`。默认...

    Python-kPython的枚举类型支持库

    k-Python的枚举类型支持库可能是一个扩展或优化了Python内置`enum`模块的第三方库,用于提供更丰富的功能或更方便的用法。 在Python的标准`enum`库中,有四种基本的枚举类型: 1. `Enum`: 基础枚举类,所有其他...

    Java中的“枚举类型

    ### Java中的“枚举类型”知识点详解 #### 一、引言 在Java编程语言中,枚举(Enum)作为一种特殊的类,其设计初衷是为了更好地处理一组固定不变的常量集合。相较于传统的使用`static final`字段来表示常量的做法...

    Java 实例 - Enum(枚举)构造函数及方法的使用源代码-详细教程.zip

    在Java中,枚举类型可以通过`enum`关键字来创建。一个简单的枚举定义如下: ```java public enum Color { RED, GREEN, BLUE } ``` 这里定义了一个名为Color的枚举,包含三个常量:RED、GREEN和BLUE。 二、枚举...

    Java枚举类型enum的详解及使用

    Java 枚举类型 enum 的详解及使用 Java 枚举类型 enum 是 Java 语言中的一种特殊的数据类型,自从 JDK 1.5 引入枚举类型以来,它已经成为了 Java 程序员中的一种常用工具。本文将对 Java 枚举类型 enum 进行详解,...

    全面掌握java枚举类型(enum-type)1

    全面掌握 Java 枚举类型(enum type) Java 枚举类型是一种特殊的数据类型,它可以取有限个数的明确值。枚举类型的引入解决了 int 枚举模式和 String 枚举模式的缺点,提供了类型安全性、可读性和性能等优势。 ...

    JAVA高级编程中Enum枚举

    1. **预定义的方法**:每个枚举类型都自动继承了`java.lang.Enum`类,因此它们拥有`toString()`、`compareTo()`等方法。 2. **唯一性**:枚举实例的创建是在编译时完成的,确保了每个枚举值的唯一性。 3. **安全性**...

    Java枚举(enum)类型深度解析:特性、用法与最佳实践

    本文将深入探讨Java枚举类型的特点、用法以及最佳实践。 Java中的枚举类型是一种强大的特性,它提供了一种类型安全的方式来表示一组固定的常量。枚举类型可以包含字段、方法和构造器,使得它们可以携带额外的信息和...

    java 枚举(enum) 详解(学习资料)

    Java 枚举(enum)是 Java 语言中的一个重要特性,自 Java 5 开始引入。枚举用于定义一组相关的常量,这些常量通常代表一个有限的、预定义的值集合。枚举类是一种特殊的类,它具有以下特点: 1. **枚举类的声明**:...

    java enum 枚举 学习资料

    Enum 枚举类型是 Java 5 中引入的一种新特性,旨在解决传统的 int 枚举常量的缺陷。 1. 枚举语法 在 Java 中,枚举类型是用 enum 关键字来定义的。枚举元素列表必须写在枚举类的最前面,每个元素之间用逗号隔开,...

    计算机后端-Java-Java核心基础-第23章 枚举类与注解 06. 使用enum关键字定义枚举类.avi

    计算机后端-Java-Java核心基础-第23章 枚举类与注解 06. 使用enum关键字定义枚举类.avi

    mybatis-plus使用@EnumValue处理枚举类型的示例代码

    这个注解主要用于解决枚举类型在序列化和反序列化过程中的问题,确保数据在数据库和Java对象之间能够正确地转换。 在MyBatis-Plus 3.1.0版本之后,如果你不需要使用原生的枚举类型,可以通过配置默认的枚举类型...

    计算机后端-Java-Java核心基础-第23章 枚举类与注解 08. 使用enum关键字定义的枚举类实现接口.avi

    计算机后端-Java-Java核心基础-第23章 枚举类与注解 08. 使用enum关键字定义的枚举类实

    计算机后端-Java-Java核心基础-第23章 枚举类与注解 07. Enum类中的常用方法.avi

    计算机后端-Java-Java核心基础-第23章 枚举类与注解 07. Enum类中的常用方法.avi

Global site tag (gtag.js) - Google Analytics