的枚舉的枚舉方法我有以下接口返回特定接口
public interface DeviceKey {
String getKey();
}
我也有所有擴展了此界面的各種枚舉。
在包含所有枚舉的類中,我想要一個基於字符串(key)的方法,可以返回對應於此字符串的枚舉。該字符串與枚舉相關,但不是名稱。我的階級和枚舉看起來是這樣的:
public class Settings {
private static final Map<String, DeviceKey> lookupAll = Maps.newHashMap();
static {
lookupAll.putAll(SmartSetting.lookup);
// Plus a lot more similar to these
}
public static DeviceKey valueOfAnyKey(String key) {
return lookupAll.get(key);
}
public enum SmartSetting implements DeviceKey {
STATUS("smart_status");
private static final Map<String, SmartSetting> lookup = EnumUtil.addAll(SmartSetting.class);
private final String key;
SmartEncryptionSetting(String key) {
this.key = key;
}
@Override
public String getKey() {
return key;
}
}
}
目前執行的valueOfAnyKey()
回報DeviceKey這當然不是一個枚舉。我應該怎麼做才能使valueOfAnyKey()
返回一個類型爲DeviceKey的枚舉?
的EnumUtil:
private static class EnumUtil {
public static <T extends Enum<T> & DeviceKey> Map<String, T> addAll(Class<T> theClass) {
final Map<String, T> retval = new HashMap<String, T>();
for(T s : EnumSet.allOf(theClass)) {
retval.put(s.getKey(), s);
}
return retval;
}
}
儘管最終的代碼是在我的答案中寫的,但我選擇這是正確的答案。我這樣做是因爲看着原來的問題,這是正確的答案。一開始就不可能獲得我一直在尋找的東西。 – homaxto