我不是100%确信,这是一个好主意,但我今天碰到了一些代码,因此目前实现为:如何要求泛型参数是实现接口的枚举?
class MyWidget <T extends Enum<T> > {
MyWidget(Map<T, Integer> valueMap) {
mValueMap = valueMap;
}
Map<T, Integer> mValueMap;
}
又在哪里MyWidget
提供使用mValueMap
方法,将传入的Enum
来自Integer
。
我正在考虑这样做是想重构这个,所以我会宣布我的枚举:
interface MyInterface {
public Integer getValue();
}
enum MyEnum implements MyInterface {
foo, bar;
public Integer getValue() {
return ordinal();
}
}
然后我能够改写MyWidget
到的东西,看上去隐约像这样想:
public class MyWidget<T extends Enum<T> extends MyInterface> {
...
}
,然后将能够从MyInterface
上T
型对象中MyWidget
调用getValue()
方法。问题当然是,“<T extends Enum<T> extends MyInterface>
”是无效的语法。有什么办法可以解决这个问题吗?
我不想只有MyWidget<T extends MyInterface>
,因为T是一个枚举也很重要。
在此先感谢!
&语法很整洁,但是我发现使用它通常会变成代码异味,并且表明某个东西不适合您的模型。 – skaffman 2009-07-01 19:33:09
我倾向于同意(如果是这样的话,我想我已经使用了它一次或两次)。但在枚举实现接口的情况下,我认为它是适当的。 – 2009-07-01 19:41:46