Java公共(public)枚举方法目的

标签 java enums

所以我有我的枚举

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/

相关文章:

java - IBM 3624 引脚偏移生成

java - Dropwizard 0.8.1 : multiple file upload

java - 在网络服务中订购

javascript - JavaScript 类构造函数中的默认枚举值

java - 使用 enum.values() 与 String 数组时是否会影响性能?

Java:使枚举绑定(bind)到不同的字符串值

java - 在 JDBI 中使用 IN 子句中的字符串列表

Java:使用getClass获取子类引用

java - 获取枚举实例

ios - 我可以从 Enum 数据类型创建 Realm 对象的属性吗?