枚举
1、定义
在JDK1.5之前,我们定义枚举常量都是通过如下方式:
public class Level {
public static final Level LOW = new Level(0); //构造方法被私有化了,只能通过 类名.变量名 的方式来调用
public static final Level HIGH = new Level(1);
private int levelValue;
//将Level类的构造方法私有化
private Level(int levelValue){
this.levelValue = levelValue;
}
//setter和getter方法...
}
JDK1.5引入的新的类型——枚举
可以把相关的常量分组到一个枚举类型里
2、格式
方式一:
public enum Level1 {
LOW,MEDIUM,HIGH;
}
方式二:
public enum Level {
LOW(0),MEDIUM(50),HIGH(100); //逗号隔开,分号结尾,每一个值表示一个常量,括号表示调用构造方法
private int levelValue;
private Level(int levelValue) {
this.levelValue = levelValue;
}
public int getLevelValue() {
return levelValue;
}
}
3、枚举的主要方法
返回类型 | 方法名称 | 方法说明 |
---|---|---|
int | compareTo(E o) | 比较此枚举与指定对象的顺序 |
boolean | equals(Object other) | 当指定对象等于此枚举常量时返回true |
Class<?> | getDeclaringClass() | 返回此枚举常量对应的枚举类型的Class对象 |
String | name() | 返回此枚举常量的名称 |
int | ordinal() | 返回枚举常量的序数(第一个枚举常量序数为0) |
String | toString() | 返回此枚举常量的名称(该方法可以被重写) |
static<T extends Enum> T | static valueOf(Class enumType, String name) | 返回带指定名称的指定枚举类型常量 |
4、注意事项
定义完枚举之后,尽量不要修改其中的值
枚举类的顶级父接口是java.lang.Enum(不是Object类)
枚举类不能有子类(默认被final修饰)
只能有private的构造方法
switch中使用枚举时,直接使用常量名,不用携带类名
不要为枚举类中的属性提供set方法,不符合设计初衷