枚举
用于定义有限数量的一组同类常量,例如:
错误级别:
低、中、高、急
一年的四季:
春、夏、秋、冬
商品的类型:
美妆、手机、电脑、男装、女装…
在枚举类型中定义的常量是该枚举类型的实例。
JDK1.5之前的写法:
将构造方法私有化,在类的内部创建静态全局对象,之后就不能改变。
public class Level {
public static final Level LOW = new Level(1);
public static final Level MIDDLE = new Level(50);
public static final Level HIGH = new Level(100);
private int levelValue;
// 将构造方法定义为私有的 外部不能访问
private Level(int levelValue){
this.levelValue = levelValue;
}
public int getLevelValue(){
return this.levelValue;
}
}
JDK5版本:
直接定义成枚举类
public enum Level2 {
LOW(1),MEDIUM(50),HIGH(100);
private int levelValue;
private Level2(int levelValue){
this.levelValue = levelValue;
}
public int getLevelValue() {
return levelValue;
}
}
还能简化成:
public enum Level3 {
LOW,MEDIUM,HIGH;
}
枚举类的常见方法
Enum抽象类常见方法
返回类型 | 方法名称 | 方法说明 |
---|---|---|
int | compareTo(E o) | 比较此枚举与指定对象的顺序。 |
boolean | equals(Object other) | 当前对象是否等于此枚举常量,相等为true |
int | ordinal() | 返回此枚举常量的序数(它在枚举声明中的位置,其中初始常量的序数为零)。 |
String | toString() | 该方法可以重写 |
static <T extends Enum<T>> T | valueOf(Class<T> enumType, String name) | 返回具有指定名称的指定枚举类型的枚举常量 |
实现接口的枚举类
所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。
方式一: 枚举类实现方法,枚举对象调用的都是同一个方法
public enum Level3 implements LShow{
LOW,MEDIUM,HIGH;
@Override
public void show() {
System.out.println("这是实现的show方法");
}
}
interface LShow{
public void show();
}
Level3.HIGH.show();
Level3.MEDIUM.show();
Level3.LOW.show();
结果:
这是实现的show方法
这是实现的show方法
这是实现的show方法
方式二: 每个枚举对象,都能实现自己的抽象方法
public enum Level3 implements LShow{
LOW(){
@Override
public void show() {
System.out.println("这是低级别");
}
},MEDIUM(){ // ()表示有参构造的参数列表
@Override
public void show() {
System.out.println("这是中级别");
}
},HIGH {
@Override
public void show() {
System.out.println("这是高级别");
}
};
}
interface LShow{
public void show();
}
Level3.HIGH.show();
Level3.MEDIUM.show();
Level3.LOW.show();
运行结果:
这是高级别
这是中级别
这是低级别
枚举的注意事项
-
一旦定义了枚举,最好不要妄图修改里面的值,除非修改是必要的。
-
枚举类默认继承的是java.lang.Enum类而不是Object类
-
枚举类不能有子类,因为其枚举类默认被fifinal修饰
-
只能有private构造方法
-
switch中使用枚举时,直接使用常量名,不用携带类名
-
不能定义name属性,因为自带name属性
-
不要为枚举类中的属性提供set方法,不符合枚举最初设计初衷。