概述
- Java 1.5出现
- 枚举出现之前,一般用static final int实现类似功能
- 但缺陷在于:非作者对语义不明确,以及在类似于switch中无法检测异常值
- 有一个自带静态方法values(),按照声明顺序返回枚举值
- 枚举和普通的类一样,可以添加静态或非静态的属性和方法;但是,枚举值要放在最前面
- 例子
public enum SexEnum {
WOMAN, MAN;
}
// 带参构造方法枚举
public enum Mode implements IMode {
PULLDOWN("上拉"), PULLUP("下拉");
private final String value;
private Mode(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
本质分析
public enum Color {
RED, BLUE, BLACK, YELLOW, GREEN;
}
// Color.class:
public final class enum_eddy.Color extends java.lang.Enum<enum_eddy.Color> {
// 所有枚举值都是静态常量
public static final enum_eddy.Color RED;
public static final enum_eddy.Color BLUE;
public static final enum_eddy.Color BLACK;
public static final enum_eddy.Color YELLOW;
public static final enum_eddy.Color GREEN;
// xxx
}
- 本质是final类,所以不能被继承
- 只可以实现接口,其他啥也不行
- 有构造器,属性和方法
- 枚举的构造方法只在构造枚举值时被调
- 构造方法是私有的
- 所有枚举类都继承Enum
方法
- 枚举类的方法:其实就是Enum中定义的方法
- ordinal():根据枚举值声明顺序返回整形值
- Color.RED.ordinal(); // 0
- Color.BLUE.ordinal(); // 1
- compareTo():返回枚举值序号差
- Color.RED.compareTo(Color.BLUE); // -1
- values():返回全部枚举值的数组;这个方法未在Enum中定义,实际上是编译器添加的
Color[] colors = Color.values();
for(Color c : colors){
System.out.print(c + ","); // RED,BLUE,BLACK,YELLOW,GREEN,
}
Enum类
protected Enum(String name, int ordinal) {
this.name = name;
this.ordinal = ordinal;
}
public String toString() {
return name;
}
网友评论