枚举enum
简介
JDK1.5之前,定义常量的方式如下。为了更好的管理,出现了枚举。
package EnumDemo;
public class Level {
//定义三个级别
public static final Level LOW = new Level(1);
public static final Level MID = 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;
}
}
枚举定义
枚举定义方式如下:
权限修饰符 enum 枚举名称{
实例1,实例,实例3,...
}
如第一段代码可以改写为:
package EnumDemo;
public enum Level2 {
LOW(1),MID(50),HIGH(100);
private int levelValus;
private Level2(int levelValus) {
this.levelValus = levelValus;
}
public int getLevelValus() {
return levelValus;
}
}
Enum抽象类常用方法
枚举类实现接口
每个枚举对象,都可以实现自己的抽象方法
package EnumDemo;
interface LevelShow{
void show();
}
public enum Level3 implements LevelShow{
LOW{
@Override
public void show() {
System.out.println("实现相关方法");
}
},MID{
@Override
public void show() {
System.out.println("实现相关方法");
}
},HIGH(){ //可提供有参构造参数
@Override
public void show() {
System.out.println("实现相关方法");
}
};
private int levelValue;
private Level3(int levelValue) {
this.levelValue = levelValue;
}
private Level3() {
}
public int getLevelValue() {
return levelValue;
}
//在枚举中,不要提供set接口
@Deprecated
public void setLevelValue(int levelValue) {
this.levelValue = levelValue;
}
}
注意事项
- 一旦定义了枚举,最好不要妄图修改里面的值,除非修改是必要的。
- 枚举类默认继承的是java.lang.Enum类而不是Object类
- 枚举类不能有子类,因为其枚举类默认被final修饰
- 只能有private构造方法
- switch中使用枚举时,直接使用常量名,不用携带类名
- 不能定义name属性,因为自带name属性
- 不要为枚举类中的属性提供set方法,不符合枚举最初设计初衷。