包含扩展Enum并实现接口的类的变量



我想做这样的事情:

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;

最新更新