首页 > 解决方案 > 将带有自定义实现方法的通用枚举作为参数传递

问题描述

我想映射通用枚举实例的标签-> 值。使用以下代码这是可行的:

  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()

为了做到这一点,我应该在签名上声明一些东西,强制参数是一个实现该getLabel()方法的枚举。例如,我尝试过,

public static <T extends Enum<T implements Labelizable>> 

和其他一些类似这样的语法没有成功。有没有办法实现这种行为,或者枚举不能继承的事实阻止了这种方法?

标签: javaenumsinterface

解决方案


语法是:

public static <T extends Enum<T> & Labelizable> 
    List<Map<String, String>> mapEnumValues(T[] myEnumValues) {

您首先放置泛型参数必须继承的超类,然后是它必须实现的接口,所有这些都用&.


推荐阅读