我有一个IDevice
接口(interface)和此接口(interface)的两个枚举实现:AndroidDevice
和IosDevice
。
问题是:我想在接口(interface)引用上使用潜在键入并调用values()
方法:
private IDevice getDeviceByReadableName(String versionInXml, IDevice devices) {
for(IDevice device : devices.values()){
//...
所以我必须在我的界面中添加
public IDevice[] values();
:public interface IDevice {
//...
public IDevice[] values();
}
但这是行不通的。 Eclipse要求我
remove static modifiers from AndroidDevice(...)
请:
最佳答案
使用类型交集:
private <T extends Enum<T> & IDevice> T getDeviceByReadableName(String versionInXml, Class<T> deviceClass) {
for (T device : deviceClass.getEnumConstants()) {
if (<some-condition>)
return device;
}
return null;
}
绑定(bind)到
Enum<T>
可以确保deviceClass.getEnumConstants()
将返回值,而绑定(bind)到& IDevice
则可以确保您返回IDevice
。像这样称呼它:
enum IosDevice implements IDevice {
iPhone, iPad, MacBook;
}
IDevice d = getDeviceByReadableName("<foo/>", IosDevice.class);