枚举介绍:
枚举(enum)是Java的一个关键字,用于表示在Java中固定个数已知的值的特征。枚举是在Java JDK1.5中引入的,在此之前,我们定义常量一般都用 public static final。
比如定义周一到周日:
public class WeekDay {
public static final int MONDAY = 1;
public static final int TUESDAY = 2;
public static final int WEDNESDAY = 3;
public static final int THURSDAY = 4;
public static final int FRIDAY = 5;
public static final int SATURDAY = 6;
public static final int SUNDAY = 7;
}
而这种方法的缺陷就是不够直观,比如说我们需要打印出“周六”,但我们获取到的只是这些常量的数值,并不是真正有意义的信息。
从JDK1.5引入枚举之后,就可以解决这个问题了。
public enum WeekDay {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
public static void main(String[] args) {
WeekDay[] days = WeekDay.values();
for (WeekDay day : days) {
System.out.println(day);
}
}
}
可以使用values ()方法提取枚举的所有元素。
打印结果:
枚举类型的元素还可以使用==操作符进行比较
public static void main(String[] args) {
WeekDay day = WeekDay.THURSDAY;
if (day==WeekDay.THURSDAY){
System.out.println("true");
}
}
注:引用对象之间互相比较,用equals(),引用对象与null比较可以用==
除此之外,枚举类型元素也可以同基本数据类型一样,用于switch语句中的参数。
枚举也有构造函数和方法,构造函数只能初始化枚举内的对象,外部不能调用,构造器默认为private
public enum WeekDay {
MONDAY(1,"周一"),
TUESDAY(2,"周二"),
WEDNESDAY(3,"周三"),
THURSDAY(4,"周四"),
FRIDAY(5,"周五"),
SATURDAY(6,"周六"),
SUNDAY(7,"周七");
private int code;
private String msg;
private WeekDay(int code,String msg){
this.code=code;
this.msg=msg;
}
public int getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
public static void main(String[] args) {
for (WeekDay day:WeekDay.values()){
System.out.println("day:"+day+","+day.getCode()+","+day.getMsg());
}
}
打印结果:
另外,枚举类型不能被继承或实现,并且枚举类型的对象已经列举出来了,是有限的,不能进行实例化创建对象
枚举在后台响应信息中的应用:
ReponseCode为响应码和响应信息
public enum ResponseCode {
SUCCESS(0,"SUCCESS"),
ERROR(1,"ERROR"),
NEED_LOGIN(10,"NEED_LOGIN"),
ILLEGAL_ARGUMENT(2,"ILLEGAL_ARGUMENT");
private final int code;
private final String desc;
ResponseCode(int code,String desc){
this.code=code;
this.desc=desc;
}
public int getCode() {
return code;
}
public String getDesc() {
return desc;
}
}
ServerResponse类为封装好的响应对象,主要用于service层或controller层的返回对象
public class ServerResponse<T> implements Serializable {
private int status;
private String msg;
private T data;
private ServerResponse(int status,String msg,T data){
this.status=status;
this.data=data;
this.msg=msg;
}
public boolean isSuccess(){
return this.status==ResponseCode.SUCCESS.getCode();
}
public int getStatus(){
return status;
}
public T getData(){
return data;
}
public String getMsg(){
return msg;
}
public static <T> ServerResponse<T> createBySuccess(String msg,T data){
return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),msg,data);
}
}