我想做这样的事情:
private Class<? extends Enum<?> implements IMultiBlockEnum> typeEnum;
我该怎么做?"&"而不是"implements"不起作用,但Eclipse也没有给出适当的解释。
Christopher Klinge
在声明推断参数类型时只能使用&
,如下所示:
<T extends Enum & IMultiBlockEnum> void x(T a) {}
通配符类型不能指定类型交集作为上限。
如果您开始怀疑为什么是这样,请考虑typeEnum.newInstance()
的返回类型是什么。它必须同时是Enum<?>
和IMultiBlockEnum
。
有关仲量联行的报价,请参阅此答案。
附言:在您的示例中,另一件没有什么意义的事情是,您最终使用了两个独立的通配符,但显然希望将其捕获为同一类型。
不能扩展Enum
枚举类型是设计的最终类型。
您可以随心所欲地使用原始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;