相关疑难解决方法(0)

如何将泛型参数作为实现接口的枚举?

我不是100%确信这是一个好主意,但我今天碰到了一些目前实现的代码:

class MyWidget <T extends Enum<T> > {
  MyWidget(Map<T, Integer> valueMap) {
    mValueMap = valueMap;
  }

  Map<T, Integer> mValueMap;
}
Run Code Online (Sandbox Code Playgroud)

其中,MyWidget然后提供使用方法mValueMap转换传入的Enum从一个到/ Integer.

我正在考虑做的是试图重构这个,以便我宣布我的枚举:

interface MyInterface {
  public Integer getValue();
}

enum MyEnum implements MyInterface {
  foo, bar;
  public Integer getValue() {
    return ordinal();
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我就可以重MyWidget写成看起来像这样模糊的东西:

public class MyWidget<T extends Enum<T> extends MyInterface> {
  ...
}
Run Code Online (Sandbox Code Playgroud)

然后就可以getValue()从内部的MyInterfaceon T-type对象调用该方法MyWidget.当然,问题是" <T extends Enum<T> extends MyInterface>"不是有效的语法.有什么办法可以解决这个问题吗? …

java generics enums

46
推荐指数
1
解决办法
1万
查看次数

标签 统计

enums ×1

generics ×1

java ×1