Java中的Enum用法
1. 关于Java Enum:
学过C/C++等语言的人,应该都对Enum类型略知一二。Enum一般用来表示一组相同类型的常量。如性别、日期、月份、颜色等。对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较时候可以用”==”来替换equals。是一种好的习惯。JDK1.5之前没有Enum这个类型,那时候一般用接口常量来替代。有了JavaEnum之后,可以更贴近的表示这种常量。
2. 如何使用Java Enum
简单的用法:JavaEnum简单的用法一般用于代表一组常用常量,可用来代表一类相同类型的常量值。如:
性别:
public enum SexEnum {
}
颜色:
public enum Color {
}
枚举对象里面的值都必须是唯一的。
可以通过Enum类型名直接引用该常量,如SexEnum.male,Color.RED.
复杂用法:Java为枚举类型提供了一些内置的方法,同事枚举常量还可以有自己的方法。可以很方便的遍历枚举对象,看个下面的例子:
1. 代码一 WeekDay.java:
public enum WeekDay {
Mon("Monday"), Tue("Tuesday"), Wed("Wednesday"), Thu("Thursday"), Fri(
private final String day;
private WeekDay(String day) {
}
public static void printDay(int i){
}
public String getDay() {
}
}
2.
public class WeekDayTest {
}
输出结果为:
Tue====>Tuesday
Wed====>Wednesday
Thu====>Thursday
Fri====>Friday
Sat====>Saturday
Sun====>Sunday
Fri
3. Java Enum原理
Java Enum类型的语法结构尽管和java类的语法不一样,应该说差别比较大。但是经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum<E>.
WeekDay经过反编译(javap WeekDay命令)之后得到的内容如下(去掉了汇编代码):
public final class WeekDay extends java.lang.Enum{
}
所以实际上Enum类型就是以Java类来实现的,没有什么新的特点,只不过java编译器帮我们做了语法的解析和编译。完全也可以自己实现。但是既然有这样方便一个东西,当然会去用了。
我自己的一个方法:
public class TWithdrawals{
private Integer status;
public enum Status {
/* 提现状态1:处理中2:提现成功3:提现失败*/
STATUSCLZ(1), STATUSTXCG(2), STATUSTXSB(3);
/**
* 参数构造器
*
* @param value
* 指定状态对应的值
*/
Status(int value) {
this.value = value;
}
/**
* 返回指定状态对应的值
*
* @return int 指定状态对应的值
*/
public int value() {
return value;
}
/** 指定状态对应的值 */
private final int value;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
}
取值方法
TWithdrawals.Status.STATUSTXCG.value()
实例:
public enum CharitableProductReportType {
noHandle(1,"aa",true),
reporting(2,"bb",true),
offShelf(3,"cc",true);
private Integer nCode;
private String name;
private Boolean ifcc;
private CharitableProductReportType(Integer nCode, String name, Boolean ifcc) {
this.nCode = nCode;
this.name = name;
this.ifcc = ifcc;
}
public Integer getNCode() {
return nCode;
}
public String getName() {
return name;
}
public Boolean getIfcc() {
return ifcc;
}
public static void main(String[] args) {
System.out.println(CharitableProductReportType.reporting.getNCode());
System.out.println(CharitableProductReportType.reporting.getName());
System.out.println(CharitableProductReportType.reporting.getIfcc());
}
}