java - 将带有自定义实现方法的通用枚举作为参数传递
问题描述
我想映射通用枚举实例的标签-> 值。使用以下代码这是可行的:
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>>
和其他一些类似这样的语法没有成功。有没有办法实现这种行为,或者枚举不能继承的事实阻止了这种方法?
解决方案
语法是:
public static <T extends Enum<T> & Labelizable>
List<Map<String, String>> mapEnumValues(T[] myEnumValues) {
您首先放置泛型参数必须继承的超类,然后是它必须实现的接口,所有这些都用&
.
推荐阅读
- reactjs - UseEffect 挂钩不起作用或如何显示异步数据
- operating-system - 监视器:“在每个时间点,最多有一个线程可能正在执行它的任何方法。”
- python - Mongo 错过了捕获插入触发器
- python - 使用 spaCy nlp 分析 df 中的文档列的问题
- sql - SQL:显示孩子和兄弟/姐妹
- mongodb - MongoDB中的排序子项
- javascript - 如何从 chrome 扩展 api 获取返回值?
- angular8 - ng2-smart-table 中的 noDataMessage” 更改字体颜色并将 noDataMessage 对齐到中心
- c++ - c ++读取多维数组作为整数仅用于比较
- javascript - 为什么 do-while 不评估逻辑 &&?