2013-10-21 20 views
3
public enum AgeGroup { 
     CHILD{ 
      public int get(){ 
       return 10; 
      } 
     }, 
     TEEN, YOUNG, MID, OLD; 
    } 

調用方法我有一個枚舉AgeGroup,正如你所看到的是CHILD有一個方法get()。有人可以告訴我爲什麼我們不能撥打get()CHILD背後的設計方法是什麼?爲什麼它是這樣設計的?上枚舉

+0

我有同樣的問題。我發現很奇怪,可以在你的例子中定義一個特定的枚舉類型的方法,但是沒有辦法調用它。我的意思是代碼編譯,但不能像調用其他枚舉定義「默認」方法那樣調用該方法。 –

回答

4

首先,枚舉的所有實例都是相同類型,這意味着所有實例具有的方法同一組的。

您需要聲明的枚舉類型本身的實例的方法有一種方法:

public enum AgeGroup { 
    CHILD{ 
     public int get(){ 
      return 10; 
     } 
    }, 
    TEEN, YOUNG, MID, OLD; 
    public int get() { 
     return 0; 
    } 
} 

如果所有情況下推翻了get()方法CHILD了,你可以聲明的方法abstract,哪支部隊編碼器在添加新實例時實現該方法。

最好的方法是使用一個final場,通過自定義構造函數初始化,與getter:

public enum AgeGroup { 
    CHILD{10), TEEN(19), YOUNG(35), MID(50), OLD(80); 
    private final int age; 
    AgeGroup(int age) { 
     this.age = age; 
    } 
    public int get() { 
     return 
    } 
} 
1

Javadoc說:「枚舉聲明定義了一個類(稱爲枚舉類型)。」 因此,基本上你可以在枚舉聲明中包含一些方法,但是將爲枚舉的所有元素定義方法。 檢查星球示例:http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html 由於您試圖爲枚舉的一個元素聲明函數,因此您寫入的內容不符合類(或枚舉)的有效聲明。

+0

是的,雖然它不是一個有效的枚舉聲明,它編譯。糾正我,如果我錯了,但我認爲這是不合邏輯的,我的意思是這種行爲是爲枚舉實施的方式。 –