内容简介:枚举类型很早就在计算机语言中存在了,主要被用来将一组相似的值包含进一种类型中,这种类型的名称被定义成独一无二的类型描述符,这就是枚举类型。在java语言中,枚举类型是一个完整功能的类,允许开发者给枚举类型添加方法和属性,同时也可以提供接口。同时Java也为Enum提供了高质量的实现,比如comparable和Serializable接口.
Enum的简介
枚举类型很早就在计算机语言中存在了,主要被用来将一组相似的值包含进一种类型中,这种类型的名称被定义成独一无二的类型描述符,这就是枚举类型。
在 java 语言中,枚举类型是一个完整功能的类,允许开发者给枚举类型添加方法和属性,同时也可以提供接口。同时Java也为Enum提供了高质量的实现,比如comparable和Serializable接口.
* 其中:Comparable 是 排序 接口,如果一个Java类有这个接口,那么只能说明这个类支持排序。即然实现Comparable接口的类支持排序,假设现在存在“实现Comparable接口的类的对象的List列表(或数组),则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。“实现Comparable接口的类的对象”可以用作“有序映射(如TreeMap)”中的键或“有序集合(TreeSet)”中的元素,而不需要指定比较器。 Serializable接口的对象转换成一个字符序列,并能够在以后将这个字节序列完全恢复为原来的对象。而且这个过程是可以通过网络完成的,也就是说序列化机制能够自动弥补不同操作系统之间差异。 *
Enum的定制
通过类的定义,可以给Enum一些复杂的功能,例如下面代码给Enum增加属性:
public enum DrinkEnum{
Enum的一些坑
Enum的原理
在使用enum创建枚举类型后,编译器会为其生成一个对应的枚举类,这个类继承与java.lang.Enum。举例如下:
编译后会变成Day.class,那么测者反编译后看到如下:
可以看到,编译后生成一个final类,同时前面的七个日期定义成七个类型。同时还有两个静态方法,分别是values()和 valueOf(),MONDAY枚举类型对应public static final Day MONDAY;,values()方法的作用就是获取枚举类中的所有变量,并作为数组返回,而valueOf(String name)方法与Enum类中的valueOf方法的作用类似根据名称获取枚举变量,只不过编译器生成的valueOf方法更简洁些只需传递一个参数。由于values()方法是由编译器插入到枚举类中的static方法,所以如果我们将枚举实例向上转型为Enum,那么values()方法将无法被调用,因为Enum类中并没有values()方法,valueOf()方法也是同样的道理。
final变量经常和static关键字一起使用,作为常量。final类通常功能是完整的,不允许被继承。
因此枚举类型,在调用中如果对内部变量使用了set函数,那么就是对一个常量进行了上set操作,也就会导致所有调用的地方的值都发生了变化。
EnumSet和EnumMap
EnumSet
EnumSet是一个针对枚举类型的高性能Set接口实现,但是在其中装入的枚举类型必须是同类型的,在EnumSet中通过bit-vector实现,也就是一个long型。EnumSet支持在遍历。
同时EnumSet还提供了一个获取子集的方法:
<weekdayenum> JobDays = EnumSet.of(WeekDayEnum.Mon,WeekDayEnum.Fri); </weekdayenum>
EnumMap
EnumMap是一个高性能的Map接口实现,主要管理用枚举做Key-Value的关系,内部是通过数组方式实现的。
<weekdayenum rainbowclolor=""> schema = new EnumMap <weekdayenum values="" i="" rainbowclolor=""> (WeekDatEnum.class); </weekdayenum> </weekdayenum>
关注测者,关注测试
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 测者的JUnit单元测试探坑记:Junit单元测试遇见的一个枚举类型的坑(枚举类型详解)
- c# – 循环枚举类型
- Python 的枚举类型
- TypeScript 枚举类型用法示例
- 反编译理解java枚举类型
- 效仿 Golang 中的枚举类型
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数据结构与算法分析
张琨、张宏、朱保平 / 人民邮电出版社 / 2016-2-1 / 45
本书共分10章,主要包括第1章绪论,第2章线性表,第3章栈和队列,第4章串,第5章数组和广义表,第6章 树和二叉树,第7章图,第8章查找,第9章内部排序,第10章算法分析。其内容模块涵盖了课堂教学、习题课教学、实验教学、自学辅导、综合训练等。立体化教材的使用在提高教学效率、增强教学效果、加大教学信息量、培养学生的应用与实践能力。 作者简介一起来看看 《数据结构与算法分析》 这本书的介绍吧!