在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());
当然,在您非常简单的示例中,最好在enumNumbers
中完全实现它,例如:
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; }
}