转载自: https://blog.csdn.net/weixin_32818577/article/details/114780420
枚举
java枚举
枚举并不是必要的: 没有什么情况下 是必须用枚举类型 枚举类型只是起到用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。
既然是 声明一组常数的话 程序中也可以一个一个声明,所以枚举只是一种简便的方式。就像数组,你声明一个10个元素的整型数组,如果不想使用数组,你也可以声明10个整型变量 来替换这个数组!!
JAVA的枚举类型是我见过迄今为止最为强大的枚举类型,说一个实际的吧,我们代码中用到的。
我先说一下使用场景,在订单列表中,订单状态有:
未付款,已付款,已发货,已收货,已退货,已取消等等这些状态,这些状态在界面上展示的颜色都不一样,所以这里用到了枚举来处理,代码大致如下://第一步,先定义大致的枚举结构。
enum OrderStatus{
UNPAID,
PAID,
SENDED,
RECEIVED,
REFUNDED,
CANCALED
}
那么我们怎么在这个基础上扩展这个枚举让他具有颜色这个属性呢?加一个抽象方法。public abstract int getStateColor();
在哪里加呢?我们看完整代码,稍后解释:
enum OrderStatus{
UNPAID{
@Override
public int getStateColor() {
return Color.parseColor("#111111");
}
},
PAID{
@Override
public int getStateColor() {
return Color.parseColor("#222222");
}
},
SENDED{
@Override
public int getStateColor() {
return Color.parseColor("#333333");
}
},
RECEIVED{
@Override
public int getStateColor() {
return Color.parseColor("#444444");
}
},
REFUNDED{
@Override
public int getStateColor() {
return Color.parseColor("#555555");
}
},
CANCALED{
@Override
public int getStateColor() {
return Color.parseColor("#666666");
}
};
//加了这个抽象方法之后,编辑器会提醒你,其他枚举没有实现这个枚举,那我们在上面依次实现一下
//见以上代码
public abstract int getStateColor();
}
其中的颜色为了区别,随便写的。代码可能有点长,但是只要你在枚举里边加了抽象方法,那么所有此类型的枚举都得实现这个抽象方法,来看看使用。
OrderStatus state = OrderStatus.UNPAID;
//此时,使用此状态的颜色就很简单了
//其他地方可这么使用:state.getStateColor();