Java 枚举类的创建(自定义枚举类和使用enum关键字的对比)

在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 + '\'' +
                '}';
    }
}

这里有三个编码提示,方便大家理解记忆。

  1. 因为是确定个实例,所以枚举类构造器为私有。
  2. 和懒汉式单例模式类似,枚举类的实例在类加载时被自动创建,所有我们应该把实例变量声明为静态并且进行初始化。
  3. 枚举类变量应该由类调用,所以实例变量为公有。
  • 测试代码:
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);
    }
  • 编写提示:
  1. 使用enum关键字声明类,替代原有的类修饰符包括class关键字。
  2. 实例变量不需要关键字修饰,由逗号分隔开,最后由分号结尾。
  • 输出:
EAST
  • 对比两种实现方式,可以发现,enum关键字写法简化了大量代码。
发布了70 篇原创文章 · 获赞 4 · 访问量 3016

猜你喜欢

转载自blog.csdn.net/qq_34515959/article/details/105171005