程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2SE >> 在Eclipse 3.1中體驗J2SE 5.0的新特性: 第一部分 :枚舉類型(5)

在Eclipse 3.1中體驗J2SE 5.0的新特性: 第一部分 :枚舉類型(5)

編輯:J2SE

在Switch語句裡使用枚舉類型時,一定不能在每一個枚舉類型值的前面加上枚舉類型 的類名,否則編譯器就會報錯(會導致編譯錯誤???). 我們把上面的程序稍作修改,在 case 語句裡加上枚舉類型的類名並運行在Eclipse 3.1 平台上. 我們發現Eclipse 的問 題視圖裡提示case 語句裡枚舉類型值的前面加上枚舉類型的類名是錯誤的, 如下圖8所 示.

圖7: case 語句裡枚舉類型的值

原因是J2SE 5.0的實現要求case 語句裡每一個枚舉類型值是不能有枚舉類型類作為前 綴的.前面談到過每一個枚舉類型的值都是枚舉類型的一個實例.那麼當編譯器編譯case語 句時, 是如何處理這些實例的? 這有兩種情況:如果switch 與枚舉類型定義在同一個編 譯單元, 第一次編譯時一個新表會創建在內存裡. 在這個表裡, 每一個枚舉類型的值都和 它在枚舉類型裡定義的順序關聯起來. 編譯器編譯結果就和下面清單9顯示的的程序很像. 只不過順序號沒有加到程序裡, 而是編譯器在表裡快速查詢. 如果枚舉類型被修改或從定 義,表會被更新.

清單 9:

public class TestSwitch (
  Task task = new Task();
  switch (task.getPriority( )) {
case 0:
    //do case High
       break;
    case 1: // fall through to Low
    case 2:
    //do case Low
       break;
default: throw new AssertionError("Unexpected enumerated value!");
    }
}

還有一種經常出現的情況是 switch 與枚舉類型定義不是在同一個編譯單元.在這種情 況下, 大多數編譯器就會把switch-case 語句翻譯成一系列的if/else 語句:

清單 10:

Priority tmp = task.getPriority( );
if (tmp == High)
//do case High
else if (tmp == Midium)
else if (tmp == Low)
     //do case Low
else {
    throw new AssertionError("Unexpected enumerated value!");
}

1.3.3 Maps of Enum and Sets of Enum

在J2SE 5.0 的java.util 程序包中提供兩個新類:EnumMap 和 EnumSet,這兩個類與 枚舉類型的結合應用可使以前非常繁瑣的程序變得簡單方便.EnumMap 類提供了 Java.util.Map 接口的一個特殊實現,該接口中的鍵(key)是一個枚舉類型.

清單 11:. EnumMap 例子

public void test() throws IOException {
   EnumMap<Priority, String> descriptionMessages =
        new EnumMap< Priority, String>( Priority.class);
    descriptionMessages.put(Priority.High,  "High means ...");
      descriptionMessages.put(Priority.Medium, " Medium represents...");
       descriptionMessages.put(Priority.Low, " Low means...");
   for (Priority p : Priority.values( ) ) {
      System.out.println("For priority " + p + ", decription is: " +
             descriptionMessages.get(p));
   }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved