开发者社区> 科技探索者> 正文

Java 数据类型在实际开发中应用二枚举

简介:
+关注继续查看

在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。在JDK1.5之前,人们用接口来描述这一种数据类型。

1.5以后引入枚举

一:枚举类基本语法

定义:

  创建枚举类型要使用 enum 关键字,如果是想声明简单枚举,属性之间用逗号相隔 ;如果是属性带id,类似(male(1))这种还需要一个带id的构造方法

简单枚举类:

public enum ColorEnum {
        red, green, yellow, blue;
 }

 

枚举像普通的类一样可以添加属性和方法,如下

复制代码

public enum Gender {
    MALE(0), // 男
    FEMALE(1); // 女
    int id;
    Gender(int id) {        this.id = id;
    }    public int getId() {        return id;
    }
}

复制代码

如果不加构造器,直接在 “类型后边加(1)”  这种形式会报错,如下:

enum ColorEnum {
    red(1), green(2), yellow(3), blue(4);//编译出错:The constructor ColorEnum(int) is undefined
}

因为枚举类的本质是一个Enum类,所以它可以加一些自定义的方法:比如·上边的getId()

使用:

可以用来foreach,switch传入枚举变量, case 是枚举内定义的每一个类型。

复制代码

Gender gender = Gender.womenswitch (gender) {     case male:
         System.out.println("male");          break;     case female:
         System.out.println("female");          break;

复制代码

int compareTo(E o) 
          比较此枚举与指定对象的顺序。

Class<E> getDeclaringClass() 
          返回与此枚举常量的枚举类型相对应的 Class 对象。

String name() 
          返回此枚举常量的名称,在其枚举声明中对其进行声明。

int ordinal() 
          返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。

String toString()

           返回枚举常量的名称,它包含在声明中。

static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) 
          返回带指定名称的指定枚举类型的枚举常量。

 

二:web项目中应用枚举

@Enumeratedprivate Gender gender;//entity类

我们看一下Gender的配置

复制代码

ublic enum Gender {
    MALE(0), // 男
    FEMALE(1); // 女

    int id;

    Gender(int id) {        this.id = id;
    }    public int getId() {        return id;
    }
}

复制代码

,如果调用的原声的dao,查询出来的结果是Map

userVO.setGender(Gender.valueOf((String) map.get("gender")));//如果查询出来的是Map,则通过 Gender.valueOf(方法得到想要的枚举

如果是hibernate,则会不需要我们去关系到底查询出来的是什么,只需要指导是枚举类型即可

复制代码

List<UserVO> userVOList = new ArrayList<UserVO>();try {
    String queryString = "select *  from User U left join U.institutions INS where INS.institution.id = '"
                    + id + "' order by U.code";
    userList = userDao.query(queryString);//如果是调用hibernate,查询出来不需要调用valueOf()方法    if (userList != null && userList.size() > 0) {
                
    }
 }

复制代码

 

三 :原理分析

   参照了java enum(枚举)使用详解 + 总结,非常感谢

   enum 的语法结构尽管和 class 的语法不一样,但是经过编译器编译之后产生的是一个class文件。该class文件经过反编译实际上是生成了一个类,该类继承了java.lang.Enum<E>。所以, enum本质上 java 编译器帮我们做了语法的解析和编译的一个普通的类。

   唯一的区别,是枚举隐式继承了Enum,所以不可以在继承 ..

 EnumTest test = EnumTest.TUE;
...
System.out.println("getDeclaringClass(): " +     test.getDeclaringClass().getName());//输出结果是getDeclaringClass(): com.dtsz.enumTest.EnumTest

 

四:EnumSet,EnumMap 的应用

   EnumSet和EnumMap是枚举的比较重要的用处。他们是操作枚举对象的工具类。具体的细节推荐去看一下Java 枚举用法详解,在这里,我简单的总结一下:

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

复制代码

/ EnumSet的使用
System.out.println("EnumSet展示");
EnumSet<ErrorCodeEn> errSet = EnumSet.allOf(ErrorCodeEn.class);for (ErrorCodeEn e : errSet) {
    System.out.println(e.name() + " : " + e.ordinal());
}// EnumMap的使用System.out.println("EnumMap展示");
EnumMap<StateMachine.Signal, String> errMap = new EnumMap(StateMachine.Signal.class);
errMap.put(StateMachine.Signal.RED, "红灯");
errMap.put(StateMachine.Signal.YELLOW, "黄灯");
errMap.put(StateMachine.Signal.GREEN, "绿灯");for (Iterator<Map.Entry<StateMachine.Signal, String>> iter = errMap.entrySet().iterator(); iter.hasNext();) {
    Map.Entry<StateMachine.Signal, String> entry = iter.next();
    System.out.println(entry.getKey().name() + " : " + entry.getValue());
}

出处:http://www.cnblogs.com/ldh-better/ 

本文转自帅气的头头博客51CTO博客,原文链接http://blog.51cto.com/12902932/1949342如需转载请自行联系原作者


sshpp

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
初识Java:数据类型与变量、运算符
哈喽大家好,这篇文章我将为大家分享关于Java的数据类型与变量和运算符。
10 0
Java的数据类型
在学习一门语言之前,我们不可避免地要知道相关的数据类型,想必在之前大家应该学过C语言吧,Java的数据类型与C语言有很多的相似,但也存在着不同。那么今天我就给大家分享我学习到的关于Java的数据类型。变量分为整型变量、浮点型变量、字符类型变量、字节类型变量、布尔类型变量与字符串类型变量。接下来我将为大家一一介绍。
19 0
Java数据类型与变量
Java数据类型与变量
17 0
【添砖java】java的数据类型
【添砖java】java的数据类型
18 0
【Java|基础篇】数据类型与变量
变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。变量可以通过变量名访问。在指令式语言中,变量通常是可变的。
37 0
Java变量与数据类型
Java变量与数据类型
55 0
Java变量和数据类型,超详细整理,适合新手入门
Java变量和数据类型,超详细整理,适合新手入门
44 0
Java 最常见的面试题: String 属于基础的数据类型吗
Java 最常见的面试题: String 属于基础的数据类型吗
21 0
Java 数据类型(全网最全)
程序本质上是对数据的处理(逻辑运算),因此任何语言都需先解决如何表征【数据】这个核心概念。数据作为抽象的概念,天然的包含2个方面属性
49 0
Java数据类型中String、Integer、int相互间的转换
Java数据类型中String、Integer、int相互间的转换
53 0
+关注
科技探索者
文章
问答
视频
文章排行榜
最热
最新
相关课程
更多
相关实验场景
更多