`

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枚举ppt

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

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

    java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名。本项目为普通java项目

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

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

    Java中怎样由枚举常量的ordinal值获得枚举常量对象

    Java1.5提供了关键字enum,能够通过该关键字方便得定义自己须要的枚举类型,比方  enum Season {  SPRING, SUMMER, AUTUMN, WINTER  }  定义了一个季节枚举类型。  在本例中,对于Season.SPRING这个...

    genum:从YAML生成Java枚举类

    Genum是从YAML数组生成Java枚举类文件的代码生成器。 您可以在服务器端和客户端应用程序之间共享定义! 例如,这是一个以YAML格式编写的数组。 - Tokyo - NewYork - London - Beijing - Paris - Roma Genum将其...

    通过枚举反向给实体类赋值

    通过枚举反向给实体类赋值工具类,减少表单提交时通过request.getParameter(name)方式获取提交值的重复操作

    Java 基础枚举.pdf

    使用Java枚举可以帮助我们有效地组织常量,并将其用于多种场景,提高代码的易用性和可重用性。 如何使用Java枚举? 在Java中,定义枚举使用enum关键字,其基本语法结构如下: 其中,EnumName表示枚举类型的名称,...

    java枚举是如何保证线程安全的

    主要介绍了java枚举是如何保证线程安全的。Java SE5提供了一种新的类型-Java的枚举类型,关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用...

    全国各个省份对应代码枚举类

    比如110000是北京

    struts2枚举值、日期值转换示例

    struts2枚举值转换示例。 包括一个自定义枚举值转换器, 一个自定义日期值转换器。 需要用struts2处理枚举值的朋友可以试一下。 包括所有需要的jar包。

    java enum 枚举 学习资料

    java enum详细教程。由浅入深,包括基本语法方面..很适合新手学习。/n各位看官。绝对超值。

    用枚举值管理项目字典的实战应用(适配器模式)(代码示例)

    用枚举值管理项目字典的实战应用(适配器模式)(代码示例) 枚举值相比常量的优势 应用场景 模拟代码实现 3.1 UML类图(适配器模式) 3.2 项目Maven依赖 3.3 示例代码实现 4.4 测试 1.枚举值相比常量的优势 1.1 ...

    java中的枚举类型

    讲述了java中的枚举类型的用法,深入枚举类型

    Card_Game:使用Java枚举创建纸牌游戏

    使用Java枚举创建纸牌游戏“最高纸牌实验室” 建模最高纸牌游戏。 纸牌游戏实验室 本实验旨在为基本的纸牌游戏建模并实施规则。 我们并不是在寻找一款正在运行的游戏,而只是在寻找一款出色的TDD来证明该游戏...

    Java开发技术大全(500个源代码).

    FileList.java 自己实现的一个文件名称枚举类 MyDataIO.java 数据输入输出示例 MyFileOutput.java 将键盘读入的文字保存到文件 MyPipedIO.java 管道流示例 MySequenceIn.java 顺序输入流示例 ObjectFileTest....

    Java中对于双属性枚举的使用案例

    今天小编就为大家分享一篇关于Java中对于双属性枚举的使用案例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    EnumUtils.java

    通用Java枚举值匹配工具类,可将任意值与指定的枚举类中的枚举值匹配,并返回该枚举类中的枚举常量。

    SDKjAVA_大华sdk视频_大华javasdk_

    读取大华sdk下载,视频比较全面,winform版本的

Global site tag (gtag.js) - Google Analytics