测者的JUnit单元测试探坑记:Junit单元测试遇见的一个枚举类型的坑(枚举类型详解)

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

内容简介:枚举类型很早就在计算机语言中存在了,主要被用来将一组相似的值包含进一种类型中,这种类型的名称被定义成独一无二的类型描述符,这就是枚举类型。在java语言中,枚举类型是一个完整功能的类,允许开发者给枚举类型添加方法和属性,同时也可以提供接口。同时Java也为Enum提供了高质量的实现,比如comparable和Serializable接口.其中:Comparable 是排序接口,如果一个Java类有这个接口,那么只能说明这个类支持排序。即然实现Comparable接口的类支持排序,假设现在存在“实现Comp

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{

// 酒
Wine("a cup of wine ");
//橙汁
Oragen_Juice("a cup of oragen juice")
//Enum对象的drink_class属性
private String drink_class;
//枚举对象构造函数
private DrinkEnum(String drink){

    this.drink_class=drink;
}
//枚举对象的drink_class属性
public String getDrink(){
    return this.drink_class;
}

Enum的一些坑

1 Enum 不支持public和protected修饰符的构造方法,因此构造函数一定要是private或者friendly的,这也就约束了枚举对象是无法在程序中通过直接调用构造函数进行初始化的。

2 Enum的值是通过运行期构造出来的对象表示的,因此在集群环境下,每个jvm构造出同义对象,但是在做布尔运算的时候有可能有问题,因此要格外注意。在对Enum进行比较的时候,使用值比对。

EnumSet和EnumMap

EnumSet

EnumSet是一个针对枚举类型的高性能Set接口实现,但是在其中装入的枚举类型必须是同类型的,在EnumSet中通过bit-vector实现,也就是一个long型。EnumSet支持在遍历。

for (WeekDayEnum day:EnumSet.range(WeekDayEnum.Mon,WeekDayEnum.Sun)){
    System.out.println(day)
}

同时EnumSet还提供了一个获取子集的方法:

EnumSet <weekdayenum> JobDays = EnumSet.of(WeekDayEnum.Mon,WeekDayEnum.Fri);

EnumMap

EnumMap是一个高性能的Map接口实现,主要管理用枚举做Key-Value的关系,内部是通过数组方式实现的。

private static Map<weekdayenum>schema= new EnumMap<weekdayenum.values>(WeekDatEnum.class);

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

查看所有标签

猜你喜欢:

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

JAVA核心技术(卷1)

JAVA核心技术(卷1)

Cay S. Horstmann、Gary Cornell / 杜永萍、邝劲筠、叶乃文 / 机械工业出版社 / 2008-6 / 98.00元

《JAVA核心技术(卷1):基础知识(原书第8版)》是《Java核心技术》的最新版,《Java核心技术》出版以来一直畅销不衰,深受读者青睐,每个新版本都尽可能快地跟上Java开发工具箱发展的步伐,而且每一版都重新改写了的部分内容,以便适应Java的最新特性。本版也不例外,它反遇了Java SE6的新特性。全书共14章,包括Java基本的程序结构、对象与类、继承、接口与内部类、图形程序设计、事件处理......一起来看看 《JAVA核心技术(卷1)》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具