所以我有我的枚举
public enum Sample {
ValueA{
@Override
public String getValue(){ return "A"; }
},
ValueB{
@Override
public String getValue(){ return "B"; }
public void doSomething(){ }
};
abstract public String getValue();
};
我还有一些其他代码试图使用枚举。
Sample.ValueB.doSomething();
这看起来应该是有效的,但会产生错误“The method doSomething() is undefined for the type Sample”。相对于
Sample value = Sample.ValueB;
value.doSomething();
这会产生相同的错误并且看起来很合理。
我认为对于为什么第一个不起作用的原因有一个合理的答案,并且它与两个示例在幕后是等效的有关。我希望有人能指出我为什么会这样的文档。
最佳答案
“字段”ValueA
的类型是Sample
。这意味着您只能调用 Sample
提供的 ValueA
上的方法。来自 JLS §8.9.1. Enum Constants :
Instance methods declared in these class bodies may be invoked outside the enclosing enum type only if they override accessible methods in the enclosing enum type.
更重要的是:从设计的角度来看,enum
值应该是统一的:如果某些操作可以用一个特定的值,那么它应该可以用所有的值(尽管它可能会导致不同的代码被执行)。
关于Java公共(public)枚举方法目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7243401/