我想做这样的事情:
private Class<? extends Enum<?> implements IMultiBlockEnum> typeEnum;
我该怎么做? &#34;&amp;&#34;而不是&#34;实现&#34;不起作用,但Eclipse也没有给出正确的解释。
Christopher Klinge
答案 0 :(得分:5)
在声明推断参数类型时,您只能使用&
,如下所示:
<T extends Enum & IMultiBlockEnum> void x(T a) {}
通配符类型可能未将类型交集指定为上限。
如果您开始想知道为什么,那么请考虑typeEnum.newInstance()
的返回类型。它必须同时是Enum<?>
和IMultiBlockEnum
。
有关JLS报价,请参阅this answer。
P.S。在你的例子中另一个没有意义的事情是你最终使用了两个独立的通配符,但显然希望它被捕获为相同的类型。
答案 1 :(得分:0)
您无法扩展枚举
枚举类型是最终的设计。
答案 2 :(得分:0)
您可以根据需要使用原始枚举创建自己的类,而不必扩展它
答案 3 :(得分:0)
如果要求实现是某个枚举,但也要实现接口,则需要定义自己的实现接口的枚举“类”,例如
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;