`

java枚举值的使用

阅读更多
1.java枚举值解决类型安全的问题,范围问题,能获取一组值的集合,这些是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多路分发

这里举例说明
package com.fruitking.cms.autoflow;

public class CmsConstants {
	
	public enum TaskDefineState {   
		
        ON("1","启动"), OFF("0","关闭");
        
        private String flag;
        private String name;
        
        private TaskDefineState(String flag,String name){
        	this.flag = flag;
        	this.name = name;
        }
        
		public String getFlag() {
			return flag;
		}
		public void setFlag(String flag) {
			this.flag = flag;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
    };
    
    public enum TaskExecuteState {
    	
        ON("1","未执行"), OFF("0","已执行");
        
        private String flag;
        private String name;
        
        private TaskExecuteState(String flag,String name){
        	this.flag = flag;
        	this.name = name;
        }
		public String getFlag() {
			return flag;
		}
		public void setFlag(String flag) {
			this.flag = flag;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
    };
	

}

package com.fruitking.cms.autoflow;

import java.util.EnumMap;
import java.util.EnumSet;

import com.fruitking.cms.autoflow.CmsConstants.TaskDefineState;
import com.fruitking.cms.autoflow.CmsConstants.TaskExecuteState;

public class TestEnum {
    //测试函数   
    public static void main(String[] args) {
      //直接变量enum   
        for (TaskDefineState s : TaskDefineState.values())   
            System.out.println(s.name());   
        //switch与enum的结合使用   
        TaskDefineState switchStated = TaskDefineState.OFF;   
        switch (switchStated) {   
        case OFF:   
            System.out.println("select OFF");   
            break;   
        case ON:   
            System.out.println("select ON");   
            break;   
        }   
        //EnumSet的使用   
        EnumSet<TaskDefineState> stateSetd = EnumSet.allOf(TaskDefineState.class);   
        for (TaskDefineState s : stateSetd) {   
            System.out.println(s);   
        }   
        //EnumMap的使用   
        EnumMap stateMapd = new EnumMap(   
        		TaskDefineState.class);   
        stateMapd.put(TaskDefineState.ON, "is On");   
        stateMapd.put(TaskDefineState.OFF, "is off");   
        for (TaskDefineState s : TaskDefineState.values()) {   
            System.out.println(s.name() + ":" + stateMapd.get(s));   
        }   
        
        System.out.println("---------------------------------------------------");
      //直接变量enum   
        for (TaskExecuteState s : TaskExecuteState.values())   
            System.out.println(s.getFlag()+":"+s.getName());   
        //switch与enum的结合使用   
        TaskExecuteState switchStatee = TaskExecuteState.OFF;   
        switch (switchStatee) {   
        case OFF:   
            System.out.println("select OFF");   
            break;   
        case ON:   
            System.out.println("select ON");   
            break;   
        }   
        //EnumSet的使用   
        EnumSet<TaskExecuteState> stateSete = EnumSet.allOf(TaskExecuteState.class);   
        for (TaskExecuteState s : stateSete) {   
            System.out.println(s);   
        }   
        //EnumMap的使用   
        EnumMap stateMape = new EnumMap(   
        		TaskExecuteState.class);   
        stateMape.put(TaskExecuteState.ON, "is On");   
        stateMape.put(TaskExecuteState.OFF, "is off");   
        for (TaskExecuteState s : TaskExecuteState.values()) {   
            System.out.println(s.name() + ":" + stateMape.get(s));   
        }   
    }    
}

分享到:
评论

相关推荐

    java枚举结果类、根据状态值获取枚举值

    java枚举结果类、根据状态值获取枚举值 Controller: /** 模块类型枚举 */ model.addAttribute("mType", ModuleTypeEnum.ModuleTypeShow()); ftl: value="${mType.key}:${mType.value}” &lt;/#list&gt;

    简单总结java枚举类型

    Java枚举类型是Java语言中一种特殊的类,用于定义固定的常量集合,它提供了一种安全、类型化的方式来表示一组有限的值。枚举在Java中被引入为一个完整的类型,不同于C++中的枚举,这使得Java枚举更加强大且易于使用...

    java枚举实例代码

    Java枚举(enum)是Java语言中的一种特殊数据类型,用于定义一组有限的常量,这些常量在程序中作为固定的值使用。枚举在Java中被引入,目的是为了更好地管理和使用常量,提高代码的可读性和安全性。在本实例代码中,...

    列举java 枚举相关信息

    1. **类型安全**:枚举类型确保只有定义好的枚举值才能被使用,从而避免了运行时错误。 2. **枚举值的特点**: - 枚举值自动具有 `public`, `static`, 和 `final` 属性。 - 枚举值不能被外部代码创建新的实例。 3....

    java枚举类的属性、方法和构造方法应用实战

    例如,在 GenderTest 类中,我们使用 switch 语句来判断枚举值的类型,并执行不同的操作。如果枚举值是 MALE,我们将其 name 属性设置为 "男",否则,我们将其 name 属性设置为 "女"。 结论 Java 枚举类是一种非常...

    java枚举类型说明

    使用Java枚举类型相比传统的`public static final`变量有许多优势: 1. **类型安全**: 枚举类型确保只能使用预定义的值,这有助于避免程序错误。 2. **自动实现接口**: 枚举类型自动实现了`Serializable`和`...

    java枚举的一个实例

    总的来说,Java枚举提供了一种强类型、安全且易于使用的机制来表示固定集合的值。通过枚举,我们可以更好地组织代码,减少错误,并提升程序的可维护性。在JavaDemo项目中,可能包含了各种使用枚举的示例,包括但不...

    Java面试枚举从使用到原理

    本篇文章将深入探讨Java枚举的使用及其背后的原理。 一、枚举的定义与使用 1. 基本用法: 在Java中,枚举可以通过`enum`关键字来创建。例如,我们可以定义一个表示一周七天的枚举类型: ```java public enum ...

    java枚举状态机

    Java枚举(Enum)状态机是一种使用枚举类型来实现状态转换逻辑的编程技术,它在Java编程中被广泛应用于管理对象的状态变化。状态机是一种模型,用于描述一个系统或对象在不同时间点可能存在的状态以及如何从一个状态...

    java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名

    这些代码可能包括创建枚举类,然后通过反射获取枚举值、实例名以及演示如何使用`getDeclaredConstructor()`和`newInstance()`方法来访问私有构造函数(虽然这不是常规用法)。 通过深入理解这些概念,你可以更好地...

    理解java枚举类型

    Java枚举类型是Java语言中的一种特殊的类,用于定义一组固定的常量集合。它在Java中扮演着重要的角色,提供了一种安全、类型化的常量表示方式,比传统的final static变量更具有优势。理解Java枚举类型对于编写高质量...

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

    枚举常量在`switch`语句中特别有用,它们提供了更好的可读性和安全性,因为无法匹配任何非枚举值。 ```java ShapeType shape = ShapeType.CIRCLE; switch (shape) { case CIRCLE: System.out.println("Circle ...

    Java枚举类型.pdf

    在本文中,我们将深入探讨Java枚举的定义、使用方法以及它如何改善传统使用`static final`常量的模式。 首先,让我们看看传统的`static final`常量表示枚举的方式。例如,清单1展示了如何使用`public static final`...

    Java关于中文乱码问题的多种解决方法

    使用`javac`编译Java源文件时,可以添加`-encoding`参数指定源代码的编码,如`javac -encoding UTF-8 YourFile.java`。 总的来说,解决Java中的中文乱码问题需要从多方面考虑,包括文件操作、网络通信、数据库交互...

    关于java枚举ppt

    枚举的简单的介绍 枚举的作用 1.枚举可以实现一个或多个接口 2.可以定义新的变量 3.可以定义新的方法 4.可以定义根据具体枚举值而相异的类

    java中枚举的使用

    枚举可以用于switch语句中,这是枚举的一个强大特性,因为Java会自动检查枚举值的合法性,从而避免了传统的if-else或case语句可能导致的错误: ```java Color color = Color.RED; switch (color) { case RED: ...

    java枚举的一个例子

    ### Java枚举详解 在Java编程语言中,枚举(`enum`)是一种特殊的类,用于定义一组固定的常量值。这些常量值通常代表了一组预定义的选项或者状态,比如颜色、方向等。使用枚举可以提高代码的可读性和可维护性,并且...

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

    9. 可以定义根据具体枚举值而相异的类 应用场景 使用枚举类型可以重写之前的代码,解决类型安全性和可读性问题。例如: ```java public enum Season { SPRING(1), SUMMER(2), AUTUMN(3), WINTER(4); private ...

    JAVA枚举JAVA枚举.doc

    2. **自动实现 Comparable 和 Enum**:每个枚举类型都默认继承了 `java.lang.Enum` 类,因此枚举实例自动实现了 `Comparable` 接口,可以直接比较枚举值的顺序。 3. **枚举集合**:可以通过 `values()` 方法获取...

    java 枚举学习心得

    总的来说,学习Java枚举不仅能够帮助我们编写更清晰、更安全的代码,还能提高程序设计的效率。通过深入理解枚举的特性和用法,可以更好地应对各种编程场景,尤其是在处理固定值集合或需要类型安全的场合。在Java EE...

Global site tag (gtag.js) - Google Analytics