为什么枚举会实现接口?

2022-08-31 05:55:35

我刚刚发现Java允许枚举实现接口。这有什么好的用例呢?


答案 1

这里有一个例子(在有效的Java第2版中找到一个类似/更好的例子):

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()));

因此,在这里,您可以使用接口来模拟可扩展的枚举(如果不使用接口,这是不可能的)。


答案 2

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