测者的测试技术手册:Junit单元测试遇见的一个枚举类型的坑(枚举类型详解)

栏目: 编程工具 · 发布时间: 6年前

内容简介:枚举类型很早就在计算机语言中存在了,主要被用来将一组相似的值包含进一种类型中,这种类型的名称被定义成独一无二的类型描述符,这就是枚举类型。在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>

关注测者,关注测试


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据结构与算法分析

数据结构与算法分析

张琨、张宏、朱保平 / 人民邮电出版社 / 2016-2-1 / 45

本书共分10章,主要包括第1章绪论,第2章线性表,第3章栈和队列,第4章串,第5章数组和广义表,第6章 树和二叉树,第7章图,第8章查找,第9章内部排序,第10章算法分析。其内容模块涵盖了课堂教学、习题课教学、实验教学、自学辅导、综合训练等。立体化教材的使用在提高教学效率、增强教学效果、加大教学信息量、培养学生的应用与实践能力。 作者简介一起来看看 《数据结构与算法分析》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

URL 编码/解码
URL 编码/解码

URL 编码/解码