虽然这段代码正在运行,但它仍然在研磨我的齿轮:
public static <K, V> Map<K, V> entityListToIdMap(List<? extends BaseEntity<K>> list, Class<K> keyClass) {
Map<K, V> map = new TreeMap<K, V>();
if(list != null){
for (BaseEntity<K> item : list) {
map.put(item.getId(), (V) item);
}
}
return map;
}
我缺少的是,告诉方法签名,V
extends
BaseEntity<K>.
这也可能导致未经检查的警告,这使得必须将项目投射到价值为V
。
如何告诉V
必须extend BaseEntity<K>?
基于@Ori Lentz接受的答案,完整的解决方案:
public static <K, V extends BaseEntity<K>> Map<K, V> entityListToIdMap(List<V> list, Class<K> keyClass) {
Map<K, V> map = new TreeMap<K, V>();
if (list != null) {
for (V item : list) {
map.put(item.getId(), item);
}
}
return map;
}
答案 0 :(得分:6)
在定义泛型类型时,只需定义它:
public static <K, V extends BaseEntity<K>> Map<K, V> entityListToIdMap(..) {