为什么枚举会实现接口?

新手上路,请多包涵

我刚刚发现 Java 允许枚举实现接口。什么是一个好的用例?

原文由 unj2 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 514
2 个回答

枚举不仅仅必须表示被动集(例如颜色)。它们可以表示具有功能的更复杂的对象,因此您可能希望向这些对象添加更多功能 - 例如,您可能具有诸如 PrintableReportable 等接口,以及支持这些的组件。

原文由 Brian Agnew 发布,翻译遵循 CC BY-SA 2.5 许可协议

这是一个示例(在 Effective Java 2nd Edition 中可以找到一个类似/更好的示例):

 public interface Operator {
    int apply (int a, int b);
}

public enum SimpleOperators implements Operator {
    PLUS {
        int apply(int a, int b) { return a + b; }
    },
    MINUS {
        int apply(int a, int b) { return a - b; }
    };
}

public enum ComplexOperators implements Operator {
    // can't think of an example right now :-/
}

现在获取简单 + 复杂运算符的列表:

 List<Operator> operators = new ArrayList<Operator>();

operators.addAll(Arrays.asList(SimpleOperators.values()));
operators.addAll(Arrays.asList(ComplexOperators.values()));

所以在这里你使用一个接口来模拟可扩展的枚举(如果不使用接口这是不可能的)。

原文由 helpermethod 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题