Sbo*_*odd 46 java generics enums
我不是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>"不是有效的语法.有什么办法可以解决这个问题吗?
我不想这样做MyWidget<T extends MyInterface>,因为T是枚举也很重要.
提前致谢!
Mic*_*ers 86
使用' &'代替:
public class MyWidget<T extends Enum<T> & MyInterface> {
...
}
Run Code Online (Sandbox Code Playgroud)
该JLS称这是"交集型",但我能找到在Java教程没有提到它.我只是说它完全符合你所希望的" extends".
另外,我应该提一下,你可以在交集类型中拥有任意数量的类型.所以,如果你想,你可以这样做:
public class MyWidget<T extends Enum<T> & MyInterface & Serializable & Cloneable> {
...
}
Run Code Online (Sandbox Code Playgroud)
[注意:此代码示例不应被视为对Cloneable接口的认可; 它在当时只是方便.]
| 归档时间: |
|
| 查看次数: |
13787 次 |
| 最近记录: |