enum 可以实现一个接口(interface)。某些值是否可以实现接口(interface)?我正在考虑的用例是一个标记接口(interface),因此类似于以下内容:

interface Foo {}
interface Bar {}

enum Widgets {
  FOO implements Foo,
  BAR_1 implements Bar,
  BAR_2 implements Bar
}

这不能在 Java 1.8 下编译。我知道在内部,为 FOO 和 BAR_1 创建了单独的类,所以这似乎是可能的,但我可以很容易地看到标准不支持它。

应该工作的类似的东西是
interface Widgets;
enum Foo implements Widgets { FOO };
enum Bar implements Widgets { BAR_1, BAR_2 };

这有一个缺点,我不能只做 Widgets.values() 并获得所有的小部件。

最佳答案

Java Language Specification 状态



匿名类只能扩展(或实现)新实例创建表达式中指定的类型,在这种情况下是您的 enum 类型。因此,您不能让它另外实现一个接口(interface)。

以下

enum Foo {
    CONSTANT
}

被编译成类似于
class Foo extends Enum<Foo> {
    private Foo() {/* calling Enum superconstructor */}
    public static final Foo CONSTANT = new Foo();
}

如果您希望常量具有主体(覆盖或声明某些方法)
enum Foo {
    CONSTANT {
        public String toString() {
            return name().toUpperCase();
        }
    }
}

变得像
class Foo extends Enum<Foo> {
    private Foo() {/* calling Enum superconstructor */}
    public static final Foo CONSTANT = new Foo() { // no way to express an additional interface
        public String toString() {
            return name().toUpperCase();
        }
    };
}

关于java - 枚举的各个值是否可以实现接口(interface),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34074768/

10-09 15:58
查看更多