前言:
枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中。此外,枚举类型还提供了安全检查功能。枚举类型本质上还是以类的形式存在。
举个例子:
假如说我们有个方法要判断参数来知道今天是星期几
初级程序员写法:
public void getMessage(int id) {
switch (id) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期天");
break;
default:
break;
}
}
调用的时候传入1到7就行了对吧:
getMessage(1);
,但是这种方式可读性很差,我TM调你的方法还得看得懂你的方法内容是干嘛的,万一我传个8进去呢,getMessage()
没有类型安全检查,别人都不知道要传什么值,
中级程序员写法:
private static final int ONE = 1;
private static final int TWO = 2;
private static final int THREE = 3;
private static final int FOUR = 4;
private static final int FIVE = 5;
private static final int SIX = 6;
private static final int SEVEN = 7;
public void getMessage(int id) {
switch (id) {
case ONE:
System.out.println("星期一");
break;
case TWO:
System.out.println("星期二");
break;
case THREE:
System.out.println("星期三");
break;
case FOUR:
System.out.println("星期四");
break;
case FIVE:
System.out.println("星期五");
break;
case SIX:
System.out.println("星期六");
break;
case SEVEN:
System.out.println("星期天");
break;
default:
break;
}
}
这种写法呢也是很常见的,每个常量我都要赋值,还都要声明
private 、static 、 final、数据类型
,当常量多了写起来也很烦。
高级程序员写法(使用枚举):
package com.example.bottomsheetdialogapplication.a;
/**
* @Author: david.lvfujiang
* @Date: 2019/12/18
* @Describe:定义枚举类
*/
public enum MyEnum {
ONE("星期一"),TWO("星期二"),THREE("星期三"),FOUR("星期四"),FIVE("星期五"),SIX("星期六"),SEVEN("星期天");
private String week;
MyEnum(String s){
week =s;
}
public String getWeek() {
return week;
}
}
public void getMessage(MyEnum id) {
switch (id) {
case ONE:
System.out.println(ONE.getWeek());
break;
case TWO:
System.out.println(TWO.getWeek());
break;
case THREE:
System.out.println(THREE.getWeek());
break;
case FOUR:
System.out.println(FOUR.getWeek());
break;
case FIVE:
System.out.println(FIVE.getWeek());
break;
case SIX:
System.out.println(SIX.getWeek());
break;
case SEVEN:
System.out.println(SEVEN.getWeek());
break;
default:
break;
}
}
这里要说的是枚举中的常量必须全大写,写法和常量命名规则一样。枚举常量也是对象,因此使用枚举后
getMessage()
方法的参数只能传入枚举对象,传入其他则编译不过,实现了类型安全检查。可以读性也变好了,我们只需要到枚举类中一看就能知道我们传的参数具体是干嘛的,枚举中的常量写法也很简单。同时枚举也是一个类,它提供了很多方法给我们。