【发布时间】:2016-05-06 07:55:15
【问题描述】:
如何将 SomeEnum1 或 SomeEnum2 分配给实现 SomeInterface 的“枚举”?我不能直接指定接口,因为它是一个类而不是枚举。
我确定有一个指定的语法糖可以使这项工作发挥作用,但我无法弄清楚。
例子:
public class Main {
public interface SomeInterface {
public String doSomething();
}
public enum SomeEnum1 implements SomeInterface {
something1;
@Override
public String doSomething() {
return "SomeEnum1";
}
}
public enum SomeEnum2 implements SomeInterface {
something2;
@Override
public String doSomething() {
return "SomeEnum2";
}
}
public static void main(String[] args) {
// Works but not polymorphic
SomeEnum1 e1 = SomeEnum1.something1;
System.out.println(e1.name() + " " + e1.doSomething());
// Not an enum
// SomeInterface e2 = SomeEnum1.something1;
// System.out.println(e2.name() + " " + e2.doSomething());
// Bounds mismatch
// Enum<SomeInterface> e3 = SomeEnum1.something1;
// System.out.println(e3.name() + " " + e3.doSomething());
}
}
【问题讨论】:
-
所以您想使用
SomeInterface作为enum?在这种情况下,您需要SomeInterface来扩展Enum,这是不可能的。即使将SomeInterface替换为SomeAbstractClass,仍然是不可能的,因为所有enums 都是从java.lang.Enum扩展而来的,而且Java 不支持多重继承。 -
How can I assign SomeEnum1 or SomeEnum2 to an "enum"你不能,枚举不能扩展
标签: java interface enums polymorphism