Java 枚举 Enumeration
枚举:
- 自定义枚举类
- 使用enum关键字
- 不需要提供setXxx方法, 枚举对象通常只读
- 对枚举对象使用static final, 实现底层优化
- 枚举对象可有多个属性
package com.gibe;
public class Enumeration {
public static void main(String[] args) {
System.out.println(Season.AUTUMN);
System.out.println(Season.WINTER);
}
}
class Season {
private String name;
private String desc;
// 定义四个固定类属性
public static final Season SPRING = new Season("spring", "warm");
public static final Season SUMMER = new Season("summber", "hot");
public static final Season AUTUMN = new Season("autumn", "cool");
public static final Season WINTER = new Season("winter", "cold");
// 构造器私有, 防止new
// 去掉setXxx, 防止属性被修改
// 在类内部, 直接创建固定对象
// 加入final
private Season(String name, String desc) {
this.name = name;
this.desc = desc;
}
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + "'" +
", desc='" + desc + '\'' +
"}";
}
}
steps:
- 构造器私有化
- 本类内部创建对象
- 对外暴露对象 (public static final)
- 提供get方法, 不提供set方法
package com.gibe;
public class Enumeration {
public static void main(String[] args) {
System.out.println(Season.AUTUMN);
System.out.println(Season.WINTER);
}
}
enum Season {
SPRING("spring", "warm"), WINTER("winter", "cold"),
AUTUMN("autumn", "cool"), SUMMER("summer", "hot");
private String name;
private String desc;
private Season() {
}
private Season(String name, String desc) {
this.name = name;
this.desc = desc;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
}
- 使用enum关键字开发枚举类时,默认继承Enum类,而且时一个final类, javap 反编译
- 传统的 public static final Season2 SPRING = new Season2("春天", "温暖"); 简化成 SPRING("春天", "温暖"), 这里必 须知道,它调用的是哪个构造器
- 使用无参构造器 创建 枚举对象, 实参列表 () 都可省
enum Gender{
BOY,GIRL; // 调用了Gender类的无参构造器
}
enum枚举类方法
- name() 返回枚举类名称
- ordinal() 从 0 编号
- values() 反编译才能看到,返回 数组 含有定义所有枚举对象
- valueOf() 从String转为 enum对象
- compareTo 比较enum对象ordinal
package com;
public class Enumeration {
public static void main(String[] args) {
Season autumn = Season.AUTUMN;
System.out.println(autumn.name()); // AUTUMN
System.out.println(autumn.ordinal()); // 2
Season[] values = Season.values();
for (Season value : values) System.out.println(value);
Season autumn_ = Season.valueOf("AUTUMN");
System.out.println(autumn==autumn_); // true
System.out.println(Season.AUTUMN.compareTo(Season.SPRING)); // 2
}
}
enum Season {
SPRING("spring", "warm"), SUMMER("summer", "hot"), AUTUMN("autumn", "cool"), WINTER("winter", "cold");
private String name;
private String desc;
private Season() {
}
Season(String name, String desc) {
this.name = name;
this.desc = desc;
}
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
}
Notice:
- 使用enum关键字后, 不能在继承其他类, enum会隐式继承Enum, Java单继承机制
- enum实现的枚举类, 可以实现接口
package com; public class Enumeration { public static void main(String[] args) { Music.music.play(); } } interface Play{ public abstract void play(); } enum Music implements Play{ music; @Override public void play(){ System.out.println("playing ..."); } }

浙公网安备 33010602011771号