枚举

424 阅读2分钟

概述

在某些情况下,一个类的对象是有限且固定的,例如四季类,它是一个只有春夏秋冬这种实例有限且固定的类。我们将这种类称为枚举类。枚举类是一种特殊类型的类,其地位和class,interface相同。

    public enum Season {
        SPRING, SUMMER, AUTUMN, WINTER
    }

Java中使用enum关键字来定义枚举类,自定义的枚举类 继承自java.lang.Enum,且实现了Seriablizable 和 Comparable 两个接口,并且他不能继承其他类,也不能被继承。不过他可以实现一个或多个接口。

所有的枚举类的属性都是 public static final(无需程序员手动添加), 在实际应用中,我们大量使用枚举的原因是为了替代常量,相比于静态常量,枚举有如下的优点:

(1)枚举有内置方法

举例说明:当希望列出所有的季节常量,枚举类自带的values方法可以实现。

     for(Season s : Season.values()){ 
         System.out.println(s); 
     } 

(2)代码更具可读性

(3)允许进行编译时检查,它会记录可接受值的列表,避免由于传入无效值引起的意外。


定义枚举类

public enum WeekEnum {
    // 枚举类里的每个枚举实例都有属性today
    private String today;

  // 枚举实例
    SUNDAY("星期日"), MONDAY("星期一"), TUESDAY("星期二"), 
    WEDNESDAY("星期三"), THURSDAY("星期四"), FRIDAY("星期五"), 
    SATURDAY("星期六");
 
    // 枚举类的构造器只能使用 private 修饰
    private WeekEnum(String today) {
        this.today = today;
    }
    
    public String getToday() {
        return today;
    }
 
    public void setToday(String today) {
        this.today = today;
    }
    
    @Override
    public String toString(){
        return today;
    }
} 

常用方法

以上面定义的星期枚举类为例,介绍一些方法:

(1)int compareTo(E o)

该方法用于比较顺序,且进行比较的双方必须是相同类型。若调用方法的枚举对象位于指定枚举对象之后,则返回正整数;反之返回负整数;否则返回零。

System.out.println(WeekEnum.FRIDAY.compareTo(WeekEnum.MONDAY));//4
System.out.println(WeekEnum.SUNDAY.compareTo(WeekEnum.MONDAY));//-1
System.out.println(WeekEnum.FRIDAY.compareTo(WeekEnum.SATURDAY));//-1

(2)String name()

返回枚举实例的名称,即枚举值。

System.out.println(WeekEnum.FRIDAY.name());//输出FRIDAY

(3)static values() 返回一个包含全部枚举值的数组

for(WeekEnum week : WeekEnum.values()) {
    System.out.println(week);
}

(4)String toString()

返回枚举值的名称,与 name 方法类似。


参考资料

Java 中的枚举 (enum)