Java泛型和有界类型

Java泛型和有界类型,java,generics,bounded-wildcard,Java,Generics,Bounded Wildcard,我有一个ConcurrentMap的包装类,如下所示: public MapWrapper<K, V> implements ConcurrentMap<K, V> { private final ConcurrentMap<K, V> wrappedMap; ... @Override public void putAll(Map<? extends K, ? extends V> map) {

我有一个ConcurrentMap的包装类,如下所示:

public MapWrapper<K, V> implements ConcurrentMap<K, V> {

    private final ConcurrentMap<K, V> wrappedMap;

    ...
    @Override
    public void putAll(Map<? extends K, ? extends V> map) {
        wrappedMap.putAll(map);  // <--- Gives compilation error
    }
    ...
}
publicmapprapper实现ConcurrentMap{
私有最终ConcurrentMap wrappedMap;
...
@凌驾
公共空间putAll(地图您是否看到:

您是否看到:


让我们看看putAll的签名

public void putAll(Map<? extends K, ? extends V> m)

public void putAll(Map让我们看看putAll的签名

public void putAll(Map<? extends K, ? extends V> m)

public void putAll(映射您使用的是哪种编译器(同样,IDE可能有自己的编译器,就像Eclipse一样)?我设法在Eclipse中编译它,并使用javac(1.6);您也可以尝试转换wrappedMap.putAll((Map)m)我创建了一个模拟的
MapWrapper
并实例化了它
。然后用
HashMap
调用
putAll
方法,一切正常。(使用eclipse和Java 1.6)谢谢你,Arthur,我发现了错误。问题是包装映射实际上不是一个ConcurrentMap,而是一个实现该接口的类。我在代码中混合了两种不同的东西,但是由于涉及泛型,错误消息真的没有多大帮助。你使用的是哪种编译器(还有,IDE可能有自己的,就像Eclipse一样)?我设法在Eclipse中编译它,并使用javac(1.6);您也可以尝试转换wrappedMap.putAll((Map)m)我创建了一个模拟的
MapWrapper
并实例化了它
。然后用
HashMap
调用
putAll
方法,一切正常。(使用eclipse和Java 1.6)谢谢你,Arthur,我发现了错误。问题是包装映射实际上不是一个ConcurrentMap,而是一个实现该接口的类。我在代码中混合了两种不同的东西,但由于涉及泛型,错误消息真的没有多大帮助。我不确定“继承树合并的限制”是什么意思但是如果你读了评论,OP发现错误是由一个无关的问题引起的。我不确定你说的“限制合并继承树”是什么意思,但是如果你读了评论,OP发现错误是由一个无关的问题引起的。
cannot be converted to java.util.Map<? extends capture#5 of ? extends K,? extends