我想做这样的事情:
private Class<? extends Enum<?> implements IMultiBlockEnum> typeEnum;
我该怎么做?“&”而不是“implements”不起作用,但 Eclipse 也没有给出正确的解释。
克里斯托弗·克林格
我想做这样的事情:
private Class<? extends Enum<?> implements IMultiBlockEnum> typeEnum;
我该怎么做?“&”而不是“implements”不起作用,但 Eclipse 也没有给出正确的解释。
克里斯托弗·克林格
您只能&
在声明推断的参数类型时使用,如下所示:
<T extends Enum & IMultiBlockEnum> void x(T a) {}
通配符类型不能将类型交集指定为上限。
如果您开始想知道为什么会这样,请考虑typeEnum.newInstance()
. 它必须同时是Enum<?>
两者IMultiBlockEnum
。
对于相关的 JLS 报价,请参阅此答案。
PS在您的示例中没有什么意义的另一件事是您最终使用了两个独立的通配符,但显然希望将其捕获为相同的类型。
你不能扩展枚举
枚举类型是最终设计的。
您可以根据需要使用原始 Enum 创建自己的类,而无需扩展它
如果您想要求实现是某个枚举,但也实现一个接口,您需要定义自己的实现接口的枚举“类”,例如
public enum MyFancyEnum implements IMultiBlockEnum {
A,B,C,D;
// put code to implement IMultiBlockEnum here, e.g.
public void doTheMultiBlockEnumStuff(String input) {
...
}
}
然后将您的变量声明为 MyFancyEnum,例如
private MyFancyEnum typeEnum = MyFancyEnum.C;