<<1-5-5>>
Enums 的宣告- Java 5.0中的 enum (列舉清單)可以對變數的值加以限制,只能從列舉清單中選擇某一個值。使用 enum 可以減少程式內的臭蟲。
- enum 可以被宣告成它自己的獨立類別,或類別成員,然而它們不能被宣告在函式內!
- 若 enum 被宣告成獨立類別,則它只能使用 public 和預設的存取等級。
- enum 宣告後面的分號,是非必須的。
- 每一個 enum 所列舉的項目,事實上都是 enum 的實體,可以在任何 enum 型別上,藉由呼叫 value() 這個函式,一一取出 enum 的值。
- 宣告的範例如下:
- 獨立類別宣告~
enum ClothesSize {S, M, L}; //可加分號
class Clothes {
ClothesSize size;
}
public class ClothesTest {
public static void main(String[] args) {
Clothes goods = new Clothes();
goods.size = ClothesSize.M;
}
} - 類別成員宣告~
class Clothes {
enum ClothesSize {S, M, L} //可不加分號
ClothesSize size;
}
public class ClothesTest {
public static void main(String[] args) {
Clothes goods = new Clothes();
goods.size = Clothes.ClothesSize.M;
}
}
- 獨立類別宣告~
宣告 enum 的建構子、函式和變數
- 事實上,enum 是一種特殊的類別,所以除了可以利用它來列舉常數之外,還可以對它增加建構子、實體變數、函式和一些被稱為常數特定類別本體(constant specific class body)的非常奇怪的東西。
- 例:
enum ClothesSize {
S(32), M(34), L(36);
//會自動呼叫傳入 int 的建構子
ClothesSize(int no) {
this.no = no;
}
private int no;
public int getNo() {
return no;
}
}
class Clothes {
ClothesSize size;
public static void main(String[] args) {
Clothes goods1 = new Clothes();
goods1.size = ClothesSize.S;
Clothes goods2 = new Clothes();
goods2.size = ClothesSize.M;
System.out.println(goods1.size.getNo()); //會印出 32
System.out.println(goods2.size.getNo()); //會印出 34
}
} - 絕對不可以直接呼叫 enum 的建構子。enum 的建構子是根據定義在常數後面的引數,而被自動呼叫的。
- 可以定義 enum 建構子接受多個引數,也可以對它進行多載化的動作。
- enum 可以定義一個非常奇怪的東西,看起來就像匿名內隱類別(anonymous inner class),它被稱為常數特定類別本體(constant specific class body),當希望某個特定的常數,多載化某個 enum 所定義的函式的時候會用到。
- 例如當大部份 size 的衣服都是印上"?",只有 L-size 的衣服是印上"!",但又不想在取得圖案的函式中加入if/then的程式碼,所以就可以讓 L 這個常數多載 getPic() 這個函式,如下:
enum ClothesSize {
S(32),
M(34),
L(36) {
public String getPic() { //多載在 ClothesSize 定義的函式
return "!";
}
};
ClothesSize(int no) {
this.no = no;
}
private int no;
public int getNo() {
return no;
}
public String getPic() {
return "?";
}
}
...以上 CHAPTER 1 結束