簡體   English   中英

將帶有自定義實現方法的通用枚舉作為參數傳遞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM