在Java中以这种方式使用枚举有什么问题?

在Java中以这种方式使用枚举有什么问题?,java,syntax,enums,Java,Syntax,Enums,上面的代码抛出错误: public enum Numbers{ One { public String getDigit(){ return "1"; } } , Two { public String getDigit(){ return "2"; } } , Three { public St

上面的代码抛出错误:

public enum Numbers{
    One {
        public String getDigit(){
            return "1";
        }
    }
        ,

    Two {
        public String getDigit(){
            return "2";
        }
    }
        ,
    Three {
        public String getDigit(){
            return "3";
        }
    }

};  

public static void main (String[] args) throws java.lang.Exception
{
    Numbers xyz = Numbers.One;
    System.out.println(xyz.getDigit());
}

这个错误的原因是什么?对于每个常量,在枚举内调用声明方法的正确用法是什么?

您只在枚举常量上定义了方法
getDigit()
One
Two
Three
,但没有在枚举
数字上定义方法

如果要像在main方法中那样执行
xyz.getNumbers()
,那么也需要在enum类本身中使用该方法。您可以将其保留为
摘要

在那里也定义它:

Main.java:38: error: cannot find symbol
        System.out.println(xyz.getDigit());
当然,在您非常简单的示例中,最好在enum
Numbers
中完全实现它,例如:

public enum Numbers{
    One {
        @Override
        public String getDigit(){
            return "1";
        }
    },
    Two {
        @Override
        public String getDigit(){
            return "2";
        }
    },
    Three {
        @Override
        public String getDigit(){
            return "3";
        }
    };

    // Define the `getDigit()` method on the level of the enum itself too!
    public abstract String getDigit();
};

但是,如果您的逻辑很复杂,则可以覆盖枚举实例本身上的方法。

必须在枚举级别定义该方法。我调用了Number.One.getDigit(),但没有在枚举级别定义它,它抛出了以下错误:找不到symbol System.out.println(Numbers.One.getDigit())@索伦,你说得对。我已经更新了我的答案。
public enum Numbers {
    One("1"), Two("2"), Three("3");

    private String digit;

    Numbers(String digit) { this.digit = digit; }

    public String getDigit() { return digit; }
}