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/