从jdk1.5开始,java增加了enum(枚举)这个类型,但是大家在平时运用中还是比较少用到枚举的,而且很多人和我一样对枚举一知半解,下面就跟大家一起学习下enmu枚举。
先看一个最简单的枚举类型,一个返回类型的枚举:
public enum ResultType {
/**
* 成功
*/
SUCCESS,
/**
* 失败
*/
FAIL,
/**
* 异常
*/
EXCEPTION,
/**
* 错误
*/
ERROR,
/**
* 无结果
*/
NONE;
}
众所周知枚举中可以定义一些常量,但这些常量岂不是跟普通的常量相同?
public interface ResultType {
/**
* 成功
*/
public static final String SUCCESS;
/**
* 失败
*/
public static final String FAIL;
/**
* 异常
*/
public static final String EXCEPTION;
/**
* 错误
*/
public static final String ERROR;
/**
* 无结果
*/
public static final String NONE;
}
1. 第一点不同就是,在现在流行的jdk版本中String型无法switch,据说jdk7已经支持,但是那还不是主流。在flex中switch就支持String型,但是String字符串容易写错,极容易造成不必要的bug。
2. 如果非用String型那就得用大量的if…else…来进行判断,这时选用枚举就非常简单了,况且这个例子才只有几个字段,如果地名,国家等等,维护起来也非常不便。
3. 即时不是String类型,用到的是int型,可以用到switch,那么就会出现一种异常情况,就是switch的case中没有这个int类型,或是int型常量的值错误,前者无论是用接口常量还是枚举类型都会发生,但后者就只会在接口常量中发生。这时我们就不得不拿出大量精力去避免和维护这种情况。然而枚举就不会出错,这就是好处,有简单的方法为什么不用呢?
4. 而且枚举也可以进行赋值,这样就完全可以胜任一些类型匹配,状态匹配等等的情况了。例如:数据库中存储的返回类型对应值是成功1,失败2,异常3,错误4,无结果5.我们就可以在枚举中像下面这样进行赋值:
public enum ResultType {
/**
* 成功
*/
SUCCESS(1),
/**
* 失败
*/
FAIL(2),
/**
* 异常
*/
EXCEPTION(3),
/**
* 错误
*/
ERROR(4),
/**
* 无结果
*/
NONE(5);
//定义自己的属性,可以是其他类型,例如String,boolean…
private final int value;
/**
* 采用自定义属性的构造方法
*/
ResultType(int value) {
this.value = value;
}
/**
* 得到对应值
*
* @return the value
*/
public int getValue() {
return value;
}
}
这样我们就可以通过类似于ResultType. SUCCESS.getValue()获取相应类型的值了,这里需要注意的是我们可以定义value的类型为其他类型,如:String,boolean,double…等等。
java.lang. Enum与枚举是什么关系:
我们在读api或源代码的时候会发现java.lang包下有一个Enum类,这个类又是什么呢?
java api 写道
这是所有 Java 语言枚举类型的公共基本类
其实枚举类型最终会编译成一个继承了java.lang.Enum的类,所以枚举并没有什么特别之处。
我们看到Enum类中有一些公共的方法,我们常用的有equals,valueOf等。
这个equals我们很熟悉,是String型比较相同字符串时最常用的,但在枚举里该怎么用呢?
boolean s=ResultType.ERROR.equals("ERROR");
System.out.print(s);
//false
打印出来的结果是不匹配。
boolean s=ResultType.ERROR.equals(ResultType.ERROR);
System.out.print(s);
//true
结果是相同,说明枚举在比较的时候是在这么用的。
valueOf也比较简单,是将对象转换成枚举的方法:
ResultType.valueOf("ERROR");
还有一些不太常用的方法,api写的也非常清楚了。
分享到:
相关推荐
代码中包含枚举类的基本使用,和完整的请求示例。 主要实现了枚举类创建单例后,将结果返回给前端。 看过一些其他人的实现,都比较麻烦。这是结合一些博主的代码,摸索出来的比较方便的方案。 缺点就是 多线程下会...
在 Java 中,枚举(enum)是一种特殊的类,它被用来表示一组固定的常量值。枚举类型自 JDK 1.5 开始引入,为开发者提供了一种更加安全、简洁的方式来处理一组固定的数据集合。枚举中的每个元素都是该枚举类型的对象...
"c++ enmu The program"这部分暗示我们讨论的是一个用C++编写的名为“enmu”的程序或者是一个与“enum”(枚举类型在C++中的表示)相关的程序。描述中的"small programe dll"指出这可能是一个小型的动态链接库(DLL)...
java1.5新特性 枚举 问我文字大于20个字没问题吧?我曰:没问题,然后我凑了20个字~
很大程度上受 Java 的枚举特性的启发,这个库提供了一个可扩展的 Enum 类,该类为所有枚举实例提供一个序数和一个名称。 还提供了一个valueOf构造函数和values()可迭代的。 使用示例: class MyEnum extends ...
枚举 Lua的不可变枚举类型。 用法 local Enum = require " enum " -- Enums can be created like so: local Number = Enum ( " Zero " , " One " , " Two " , " Three " ) -- To control the starting value of an ...
在C++中,枚举类型分为不限定作用域(enum)和限定作用域(enum class)。 2. enum与enum class的区别? (为什么需要限定作用域?) 答:枚举作用域是指枚举类型成员名字的作用域,起自其声明之处,终止枚举定义...
目前先暂列目录,内容在逐渐增加中 JAVA 关键字 void byte int long char short float double String StringBuffer StringBuilder Array Collection Collections List ArrayList LinkedList Vector Set HashMap ...
Java版水果管理系统源码 JAVA 关键字 void byte ...enmu quicksort mergesort heapsort bubblesort selectsort insertsort stack queue list heap tree avlTree Btree B+Tree RTree throw throws try
目前先暂列目录,内容在逐渐增加中 JAVA 关键字 void byte int long char short float double String StringBuffer StringBuilder Array Collection Collections List ArrayList LinkedList Vector Set HashMap ...
而`enum`用于定义枚举类型,允许我们创建一组命名的整数常量。 在文件操作中,`class`可以用来封装文件操作,例如创建一个名为`FileWriter`的类,包含写入文件的方法。`enum`可以用来表示不同的文件操作状态,如`...