java - 需要扩展类的枚举

标签 java enums

我想要扩展我的抽象类 A 的类来提供枚举类型。我不需要约束类型本身,我只是想确保它们提供一些枚举类型。例如,我有一个抽象类 Animal,我想确保每个 Animal 都有一组行为。我不需要以任何方式限制这些行为或创建一个主列表;我只是想确保所有动物都返回象征性行为列表。

理想情况下,我想说:

public abstract class Animal {
  public List<Enum> getBehaviors(); 
}

但这不会编译干净。

有什么想法吗?通过泛型来解决这个问题会更好吗?

最佳答案

好的,我要在这里扩展一下我的评论。

如果你想拥有你的getBehaviors()方法返回特定动物的行为列表,使方法签名声明 List<Enum<?>>返回对您没有任何帮助。获得您的 List<Enum<?>> 的客户从该方法无法用它做任何有用的事情(谁知道它是什么?)。该限制也没有做任何事情来帮助确保行为列表包含的对象类型实际上是“行为”,无论这在应用程序的上下文中意味着什么。它们可以是一周中的几天、一年中的几个月或任何东西!

我猜你有一些enum就像 DogBehavior (使用 BARKBITE 等常量)并且您希望确保列表中只允许此类行为。事实上,这些行为都收集在 enum 中s 是一个实现细节。您应该做的是引入一个通用接口(interface),将某些内容指定为 Behavior 。如果没有任何与 Behavior 关联的特定方法,它可能只是一个标记接口(interface)(不定义任何方法)。否则,您可能希望它有一些方法,例如:

public interface Behavior {
  public String getName();
  public void doBehavior();
  // etc.
}

然后你可以有一些enum实现此接口(interface)的:

public enum DogBehavior implements Behavior {
  BARK("Bark") {
    public void doBehavior() {
      // bark
    }
  },
  // etc.

  private final String name;

  DogBehavior(String name) {
    this.name = name;
  }

  public String getName() {
    return name;
  }
}

那么,“动物”可能看起来像:

public abstract class Animal {
  public abstract List<Behavior> getBehaviors(); 
}

这对我来说更有意义。

关于java - 需要扩展类的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4741766/

相关文章:

c++ - 命名空间中的 Doxygen 枚举

php - 在 SilverStripe DataExtension 中重载枚举

java - 如何使用JUnit4测试void方法?

java - 在netbeans中使用视觉 Swing JPopup菜单

java - PaintComponent 似乎没有被调用或显示

enums - 枚举的 Kotlin Proguard 规则?

ios - Swift 错误处理——结构/类与枚举

java - 作为枚举成员的数组编译失败

java - 根据标识符选择类别的设计

附加到新对象的 Java 注释?