在Java 5.0版本之前,如果我们要实现枚举类必须要通过其定义创建枚举类。枚举类的关键定义是:含有确定个数的实例。一般枚举类的应用是定义确定数量的常量,或者创建一个单例类(当实例个数为一个时)。当Java 5.0版本发行时,提供了enum关键字帮助我们创建枚举类,同时还有一些额外的功能和使用技巧。
- 自定义枚举类:
/**
* Java 5.0之前自定义写法
*
* Enum Season class
*/
public class Season {
//因为枚举类含有确定的对象,所以我们把对象的属性也设置为常量
private final String name;
private final String description;
//构造器设置为private
private Season(String name, String description){
this.name = name;
this.description = name;
}
public static final Season SPRING = new Season("Spring", "Now is spring.");
public static final Season SUMMER = new Season("Summer", "Now is summer.");
public static final Season AUTUMN = new Season("AUTUMN", "Now is autumn");
public static final Season WINTER = new Season("Winter", "Now is winter");
public String getName() {
return name;
}
public String getDescription() {
return description;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", description='" + description + '\'' +
'}';
}
}
这里有三个编码提示,方便大家理解记忆。
- 因为是确定个实例,所以枚举类构造器为私有。
- 和懒汉式单例模式类似,枚举类的实例在类加载时被自动创建,所有我们应该把实例变量声明为静态并且进行初始化。
- 枚举类变量应该由类调用,所以实例变量为公有。
- 测试代码:
import org.junit.jupiter.api.Test;
/**
* 枚举类:
* 1. 当类对象的个数为确定的有限个时,我们称此类为枚举类。
* 2. 当我们需要定义一组常量时,我们可以使用枚举类。
* 3. 如果枚举类中只有一个对象时,该对象可以看作单例。
*/
public class EnumTest1 {
@Test
public void test1(){
Season season = Season.SPRING;
System.out.println(season.getDescription());
}
}
- 输出结果:
Spring
- Java 5.0版本使用enum关键字实行枚举类:
enum Direction {
EAST(0), SOUTH(1), WEST(2), NORTH(3);
private final Integer value;
private Direction(Integer value){
this.value = value;
}
public Integer getValue() {
return value;
}
}
- 测试代码:
@Test
public void test2(){
Direction direction = Direction.EAST;
System.out.println(direction);
}
- 编写提示:
- 使用enum关键字声明类,替代原有的类修饰符包括class关键字。
- 实例变量不需要关键字修饰,由逗号分隔开,最后由分号结尾。
- 输出:
EAST
- 对比两种实现方式,可以发现,enum关键字写法简化了大量代码。