Java-枚举类

Java-枚举类

枚举类内可以直接写出所有实例。

enum Weekday {
   SUN, MON, TUE, WED, THU, FRI, SAT;
}

不可能引用非枚举的值。

enum类型的每个常量在JVM中只有一个唯一实例,可以直接用==比较:

if (day == Weekday.FRI) { // ok!
}
if (day.equals(Weekday.SUN)) { // ok, but more code!
}

和一般的class有什么区别?

  • 总是继承自java.lang.Enum,且无法被继承

  • 无法通过new创建enum的实例

  • 定义的每个实例都是引用类型的唯一实例

  • 可以将enum类型用于switch语句

public enum Color {
   RED, GREEN, BLUE;
}

编译器编译出的class文件:

public final class Color extends Enum { // 继承自Enum,标记为final class
   // 每个实例均为全局唯一:
   public static final Color RED = new Color();
   public static final Color GREEN = new Color();
   public static final Color BLUE = new Color();
   // private构造方法,确保外部无法调用new操作符:
   private Color() {}
}

方法

方法描述
name() 返回常量名
ordina() 返回定义的常量的顺序

可以为enum编写构造方法、字段和方法

字段强烈建议声明为final

enum Weekday {
   MON(1, "星期一"), TUE(2, "星期二"), WED(3, "星期三"), THU(4, "星期四"), FRI(5, "星期五"), SAT(6, "星期六"), SUN(0, "星期日");

   public final int dayValue;
   private final String chinese;

   private Weekday(int dayValue, String chinese) {
       this.dayValue = dayValue;
       this.chinese = chinese;
  }
   public String getChiese(){
       return this.chinese;
  }

   @Override
   public String toString() {
       return this.chinese;
  }
}

Switch

因为枚举类天生具有类型信息和有限个枚举常量,所以比intString类型更适合用在switch语句中:

public class Main {
   public static void main(String[] args) {
       Weekday day = Weekday.SUN;
       switch(day) {
       case MON:
       case TUE:
       case WED:
       case THU:
       case FRI:
           System.out.println("Today is " + day + ". Work at office!");
           break;
       case SAT:
       case SUN:
           System.out.println("Today is " + day + ". Work at home!");
           break;
       default:
           throw new RuntimeException("cannot process " + day);
      }
  }
}

enum Weekday {
   MON, TUE, WED, THU, FRI, SAT, SUN;
}

 

 

posted @ 2021-01-11 17:13  喜琅琅  阅读(67)  评论(0编辑  收藏  举报