Java 中的 Enum 枚举
Java 中的 Enum 枚举
一个典型的使用:
enum Day {
MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
使用关键字 enum 创建 枚举(Day) 在编译后 本质上 也是一个类,该类继承自java.lang.Enum
每一个枚举项(MONDAY, TUESDAY…),都会 new 一个 Day 类型的实例。并且是 public static final 的。
所以 Enum 类型所使用的内存,肯定是比一个静态 int 常量多,所以在 Android 开发中建议直接使用 @XXXDef
注解
方法
ordinal()
方法,该方法获取的是枚举变量在枚举类中声明的顺序。从 0 开始。
compareTo(E o)
Enum实现了Comparable接口。比较枚举的大小,内部实现是根据每个枚举的ordinal
值大小进行比较的。
name()
与toString()
几乎是等同的,都是输出变量的字符串形式。
valueOf(Class<T> enumType, String name)
方法则是根据枚举类的 Class 对象和枚举名称获取枚举常量,注意该方法是静态的
valueOf(String name)
方法最终还是会调用 Enum 类的 valueOf(Class<T> enumType, String name)
values()
方法的作用就是获取枚举类中的所有变量,并作为数组返回
values()
方法和valueOf(String name)
方法是编译器生成的 static 方法,注意这里有两个 valueOf
方法
几个特性
enum 可以实现接口
两个枚举常量可以用 ==
比较
可用于控制 switch
语句
添加方法与自定义构造函数
public enum Day {
MONDAY("星期一"),
TUESDAY("星期二"),
WEDNESDAY("星期三"),
THURSDAY("星期四"),
FRIDAY("星期五"),
SATURDAY("星期六"),
SUNDAY("星期日"); // 注意这里这个分号
private String desc;
private Day(String desc){
this.desc=desc;
}
public String getDesc(){
return desc;
}
public static void main(String[] args){
for (Day day:Day.values()) {
System.out.println("name:"+day.name()+ ",desc:"+day.getDesc());
}
}
}
抽象方法
enum 类的实例可以有类似多态的特性,但是也只是实例,不能作为方法的参数的类型。
public enum Direction {
LEFT{
@Override
public String getInfo() {
return "LEFT";
}
},
RIGHT{
@Override
public String getInfo() {
return "RIGHT";
}
}
;
public abstract String getInfo();
public static void main(String[] args){
System.out.println("1:"+Direction.LEFT.getInfo());
System.out.println("2:"+Direction.RIGHT.getInfo());
}
}