| 因值而異的類實作?原文為 Value-Specific Class
Bodies,其實這個功能簡單的說,實作時像是在使用匿名 內
部類別(inner class) 來實現 Command
模式,它讓您可以為每個列舉值定義各自的類本體與方法(Method)實作。 先來看看其中一種實現的方式,我們先宣告介面:
public interface IEnumDescription {
這個getDescription()方法,我們希望每個列舉的實例實作自己的方法(而不是像 列 舉上的方法 所介紹的,在定義列舉時統一實作一個getDescription()方法)例如:
public enum OpConstants implements IEnumDescription {
{ 與 }
之間是類本體,您可以在當中如何定義類別一樣宣告field成員或實作方法。TURN_LEFT、TURN_RIGHT與SHOOT三個
OpConstants的列舉實例,它們各自在本體(Body) { 與 }
之間實作了自己的getDescription()方法,而不是像上個主題中統一實作在OpConstants中,再將上個主題中的程式列出,比較一下兩
者的不同:
public enum OpConstants implements IEnumDescription {
寫個測試程式看看結果:
public class ShowEnum {
執行結果:
這個例子是將因值而異的類實作用在返回列舉值描述上,您可以依相同的方式,為每個列舉值加上一些各自的方法實作,而呼叫的介面是統一的。 您也可以運用抽象方法來改寫上面的OpConstants,例如:
public enum OpConstants {
執行結果是一樣的;基本上定義介面方法或抽象方法,是為了知道物件的操作方法,這樣您才能去操作這個物件。 |