[英]Pass a generic enum with custom implemented methods as a parameter
我想映射通用枚舉實例的 Label -> Value。 這段代碼是可行的:
public static <T extends Enum<T>> List<Map<String, String>> mapEnumValues(T[] myEnumValues) {
List<Map<String, String>> list = new ArrayList<>();
for (T myEnumValue : myEnumValues) {
Map<String, String> map = new HashMap<>();
map.put("label", myEnumValue.name());
map.put("value", myEnumValue.toString());
list.add(map);
}
return list;
}
但是現在我想為地圖使用另一個鍵,例如,我的每個枚舉都實現了一個方法getLabel()
。 例如,給定:
public interface Labelizable{
public String getLabel();
}
static public enum Options implements Labelizable {
option01("Option 01", 1), option02("Option 02", 2)
... constructor, getLabel(), ....
所以我想用以下代碼替換該行代碼:
map.put("label", myEnumValue.getLabel()); // instead of .name()
為了做到這一點,我應該在簽名上聲明一些東西 thst 強制參數是一個實現getLabel()
方法的枚舉。 我試過,例如,
public static <T extends Enum<T implements Labelizable>>
和其他一些像這樣的語法沒有成功。 有沒有辦法實現這種行為,或者枚舉不能繼承的事實阻止了這種方法?
語法是:
public static <T extends Enum<T> & Labelizable>
List<Map<String, String>> mapEnumValues(T[] myEnumValues) {
您首先放置泛型參數必須繼承的超類,然后是它必須實現的接口,全部以&
分隔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.