定義列舉型態基本上就像是在定義類別,定義列舉型態時您也可以加入方法(Method),例如,您也許會想要為列
舉值加上一些描述,而不是使用預設的toString()返回值來描述它。
public enum OpConstants { TURN_LEFT, TURN_RIGHT, SHOOT; public String getDescription() { switch(this.ordinal()) { case 0: return "向左轉"; case 1: return "向右轉"; case 2: return "射擊"; default: return null; } } }
您可以使用下面這個程式來測試一下:
public class ShowEnum { public static void main(String[] args) { for(OpConstants c : OpConstants.values()) { System.out.printf("%s%n\t%s%n", c, c.getDescription()); } } }
執行結果:
TURN_LEFT
向左轉
TURN_RIGHT
向右轉
SHOOT
射擊
|
列舉型態即然是類別,那麼您可以為它加上 建
構方法(Constructor)嗎?答案是可以的,但是不得為公開(public),這是為了避免粗心的程式設計人員直接實例化它,一個不為公
開的建構方法可以作什麼?來看看下面這個例子:
public enum OpConstants { TURN_LEFT("向左轉"), TURN_RIGHT("向右轉"), SHOOT("射擊"); private String description; OpConstants(String description) { this.description = description; } public String getDescription() { return description; } }
在列舉TURN_LEFT、TURN_RIGHT、SHOOT成員時,您一併指定描述給它,這個描述會在建構列舉物件時使用,程
式中您將之設定給私用成員description,在使用getDescription()時將之返回,使用上面的ShowEnum,您可以得到相同的
顯示結果。
與類別一樣,在定義列舉值時也可以一併實作 介面
(interface),例如:
public interface IEnumDescription { public String getDescription(); }
您可以使用這個介面規定每個實作該介面的列舉值,必須傳回一個描述列舉值的字串,例如:
public enum OpConstants implements IEnumDescription { TURN_LEFT("向左轉"), TURN_RIGHT("向右轉"), SHOOT("射擊"); private String description; OpConstants(String description) { this.description = description; } public String getDescription() { return description; } }
|