public class Test {
public enum Color {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
// 覆盖方法
@Override
public String toString() {
return this.index + "_" + this.name;
}
}
public static void main(String[] args) {
System.out.println(Color.RED.toString());
}
}
输出结果是 1_红色
原理分析
enum的语法结构尽管和class的语法不一样,但是经过编译器之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类。该类继承了java.lang.Enum
public class com.ichezheng.insurance.controller.EnumTest extends java.lang.Enum{
public static final com.ichezheng.insurance.controller MON;
public static final com.ichezheng.insurance.controller TUE;
public static final com.ichezheng.insurance.controller WED;
}
所以,实际上enum就是一个class,只不过java编译器帮我们帮我们做了语法解析与编译而已
总结
可以把enum看成是一个普通的class,它们都可以定义一些属性和方法,不同之处是:enum不能使用extends 关键字继承其它类,因为enum已经继承了java.lang.enum(java是单一继承)
下面是项目中对枚举类的真实应用
需求,项目中调用webservice接口返回数据数据就显示数字例如 1,2,3,在代码中需要根据数字转换成数字对应的汉字
要求如下:
ID |
NAME |
11 |
普通门诊 |
12 |
特殊门诊 |
15 |
急诊抢救死亡 |
16 |
急诊留观 |
17 |
门诊挂号 |
18 |
急诊挂号 |
19 |
急诊 |
21 |
普通住院 |
31 |
家庭病床 |
81 |
计划生育门诊 |
91 |
计划生育住院 |
创建枚举类如下:
public enum MClass {
a("普通门诊",11),//a,b,c这些字母为了区别,调用中不会用到,别重复就好
b("特殊门诊",12),
c("急诊抢救死亡",15),
d("急诊留观",16),
e("门诊挂号",17),
f("急诊挂号",18),
g("急诊",19),
h("普通住院",21),
j("家庭病床",31),
k("计划生育门诊",81),
l("计划生育住院",91);
private String name;
private int index;
private MClass(String name, int index){有参构造方法,不可或缺
this.name = name;
this.index = index;
}
public static String getNameByIndex(int index){//对外方法,根据传入的数字返回数字对应的汉字
for (MClass t: MClass.values()) {
if(t.getIndex() == index){
return t.name;
}
}
return null;
}
public String getName() {//get、set方法
return name;
}
public int getIndex() {
return index;
}
public void setName(String name) {
this.name = name;
}
public void setIndex(int index) {
this.index = index;
}
}
如何调用如下:
@Test
public void test07(){
System.out.println(MClass.getNameByIndex(11));//输出普通门诊
}