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

我有一个枚举AgeGroup,正如你所看到的,它CHILD有一种方法get()。有人能告诉我为什么我们不能get()从这CHILD背后的设计方法中调用,或者为什么它是这样设计的吗?

4

2 回答 2

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 
    }
}
于 2013-10-21T02:29:50.047 回答
1

Javadoc 说:“枚举声明定义了一个类(称为枚举类型)。” 所以,基本上你可以在枚举声明中包含一些方法,但是这些方法将为枚举的所有元素定义。在此处查看 Planet 示例:http: //docs.oracle.com/javase/tutorial/java/javaOO/enum.html 您编写的内容不符合类(或枚举)的有效声明,因为您尝试只为枚举的一个元素声明一个函数。

于 2013-10-21T02:15:23.213 回答