在枚举上调用方法

时间:2013-10-21 01:54:24

标签: java enums

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

我有一个枚举AgeGroup,您看到CHILD有一种方法get()。有人可以告诉我为什么我们不能从get()致电CHILD这背后的设计方法是什么,或者为什么这样设计?

2 个答案:

答案 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 :(得分:1)

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