[英]Why this generic reference can't point to this similar extended class in Java?
[英]Why Can't Collection Generic Type be Extended
我有一个实用程序方法,其目标是将Collection
转换为Map
。 但是,当我尝试使用泛型时,它会产生编译错误,并且想知道如何解决此问题:
public static <K, V> Map<K, V> convertCollectionToMap(Collection<V extends ListToMapConvertable<K, V>> sourceList) {
Map<K, V> newMap = new HashMap<K, V>();
for (V item : sourceList) {
newMap.put(item.getKey(item), item);
}
return newMap;
}
public interface ListToMapConvertable<K, V> {
public K getKey(V item);
}
相反,我得到Incorrect number of arguments for type Collection<E>; it cannot be parameterized with arguments <V, ListToMapConvertable>
Incorrect number of arguments for type Collection<E>; it cannot be parameterized with arguments <V, ListToMapConvertable>
编译错误Incorrect number of arguments for type Collection<E>; it cannot be parameterized with arguments <V, ListToMapConvertable>
。 我不明白这个问题,因为V
只是在扩展 ListToMapConverable
。 那么,为什么它声称我使用了两个参数- <V, ListToMapConvertable>
? 我该如何解决?
上限应在类型的声明中指定,而不是在参数的声明中指定:
public static <K, V extends ListToMapConvertable<K, V>> Map<K, V> convertCollectionToMap(Collection<V> sourceList) {
....
}
另外请注意,菱形运算符(自Java 7起可用)允许在实例化的对象声明中不重复泛型类型。
这样就足够了:
Map<K, V> newMap = new HashMap<>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.