鍍金池/ 教程/ Java/ Java枚舉體
Java參數(shù)傳遞
Java靜態(tài)內(nèi)部類
Java final關(guān)鍵字
http://www.yiibai.com/java_object_oriented_design/java_inheritan
Java泛型類
Java標(biāo)準(zhǔn)注解
Java接口教程
Java注解
Java枚舉類型
http://www.yiibai.com/java_object_oriented_design/java_class_ins
Java接口實(shí)現(xiàn)
Java哈希編碼
Java泛型約束
http://www.yiibai.com/java_object_oriented_design/java_import.ht
Java注解默認(rèn)值
Java異常拋出
Java不可變對(duì)象
Java類基礎(chǔ)
Java接口繼承
Java類方法
Java訪問級(jí)別
Java對(duì)象克隆
Java初始化塊
Java可變長度參數(shù)
Java接口字段
Java對(duì)象相等比較(Equals)
Java實(shí)例和靜態(tài)方法
Java繼承方法隱藏(覆蓋)
Java面向?qū)ο笤O(shè)計(jì)
Java對(duì)象finalize()方法
Java抽象類和方法
Java Object類
Java泛型方法和構(gòu)造函數(shù)
Java枚舉體
Java接口方法
Java this關(guān)鍵字
Java注解類型的限制
Java main()方法
Java Enum類
Java注解用法
Java枚舉比較
Java注解類型
Java內(nèi)部類成員
Java繼承和構(gòu)造函數(shù)
Java類實(shí)例化
Java內(nèi)部類類型
Java對(duì)象toString()方法
Java finally塊
Java繼承教程
Java自定義異常
Java枚舉值
Java接口作為類型
Java異常類
Java方法覆蓋教程
http://www.yiibai.com/java_object_oriented_design/java_class_bas
Java枚舉方法
Java方法重載
http://www.yiibai.com/java_object_oriented_design/java_interface
Java異常用法
Java內(nèi)部類
Java類成員訪問級(jí)別
Java異常處理教程
Java注解反射
Java構(gòu)造函數(shù)(構(gòu)造器)
Java導(dǎo)入(import語句的用法)

Java枚舉體

將主體添加到枚舉常量

可以為每個(gè)枚舉常量添加一個(gè)不同的主體。主體可以有字段和方法。枚舉常量的主體放在其名稱后的大括號(hào)中。如果枚舉常量接受參數(shù),其主體將遵循其參數(shù)列表。將主體與枚舉常量相關(guān)聯(lián)的語法如下:

<access-modifier> enum <enum-type-name>  { 
   ENUM_VALUE1  {
      // Body for ENUM_VALUE1  goes  here
   },
   ENUM_VALUE2  {
      // Body for ENUM_VALUE2  goes  here
   },
   ENUM_VALUE3(arguments-list)  {
      // Body of  ENUM_VALUE3  goes  here
   };

   // Other  code  goes  here
}

示例

以下代碼創(chuàng)建了Level枚舉類型和它的主體。

enum Level {
  LOW("Low Level", 30) {
    public double getDistance() {
      return 30.0;
    }
  },
  MEDIUM("Medium Level", 15) {
    public double getDistance() {
      return 15.0;
    }
  },
  HIGH("High Level", 7) {
    public double getDistance() {
      return 7.0;
    }
  },
  URGENT("Urgent Level", 1) {
    public double getDistance() {
      return 1.0;
    }
  };

  private int levelValue;
  private String description;

  private Level(String description, int levelValue) {
    this.description = description;
    this.levelValue = levelValue;
  }

  public int getLevelValue() {
    return levelValue;
  }

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

  public abstract double getDistance();
}

public class Main {
  public static void main(String[] args) {
    for (Level s : Level.values()) {
      String name = s.name();
      String desc = s.toString();
      int ordinal = s.ordinal();
      int levelValue = s.getLevelValue();
      double distance = s.getDistance();
      System.out.println("name=" + name + ",  description=" + desc
          + ",  ordinal=" + ordinal + ", levelValue=" + levelValue
          + ", distance=" + distance);
    }
  }
}

Level枚舉有一個(gè)抽象方法getDistance()。每個(gè)實(shí)例常量都有一個(gè)實(shí)體為getDistance()方法提供實(shí)現(xiàn)。它覆蓋了Enum類中的toString()方法。
執(zhí)行上面的代碼,得到如下結(jié)果 -

name=LOW,  description=Low Level,  ordinal=0, levelValue=30, distance=30.0
name=MEDIUM,  description=Medium Level,  ordinal=1, levelValue=15, distance=15.0
name=HIGH,  description=High Level,  ordinal=2, levelValue=7, distance=7.0
name=URGENT,  description=Urgent Level,  ordinal=3, levelValue=1, distance=1.0