Java 带有通配符的泛型(Map<;?扩展A,List<;?扩展B>;)

Java 带有通配符的泛型(Map<;?扩展A,List<;?扩展B>;),java,list,generics,map,Java,List,Generics,Map,考虑以下代码: public interface A {}; public class AImpl implements A {}; public interface B {}; public class BImpl implements B {}; public interface Service{ Map<? extends A, List<? extends B>> get(); } 因为ServiceImpl不能是接口,因为您的实现不能在接口中;将其

考虑以下代码:

public interface A {};

public class AImpl implements A {};

public interface B {};

public class BImpl implements B {};

public interface Service{
  Map<? extends A, List<? extends B>> get();
}

因为
ServiceImpl不能是接口,因为您的实现不能在接口中;将其更改为基类并尝试使用。

您编写了什么

Map<? extents A, List<? extents B> get();

Map将
服务#get()
方法的返回类型指定为

Map<? extends A, List<? extends B>> get();

使其工作。

错误说明了什么?(我认为您希望在最后一个代码段中使用extends而不是implements)我假设
extend
应该是
extends
?您还缺少一些
>
s。请复制/粘贴您在IDE中测试过的实际代码。此外,还包括编译器错误。不这样做浪费了很多人的时间。*在
MapI中,我会说这显然是错误的:
List
List的一个子类型您的示例也编译了。区别在于您是否需要通用
服务
接口(我的示例)或不需要(您的示例)。其目的可能是不需要
服务
接口的类型参数(并且它们不是必需的,至少根据初始代码草图可以这么说……)。无论如何,它没有编译的原因与
A
无关。
public interface Service<K extends A, V extends B> {
    Map<K, List<V>> get();
}

public class ServiceImpl implements Service<AImpl, BImpl> {
    @Override
    public Map<AImpl, List<BImpl>> get() {
        return null;
    }
}
Map<? extents A, List<? extents B> get();
Map<? extends A, List<? extends B>> get();
Map<AImpl, List<BImpl>> 
Map<? extends A, ? extends List<? extends B>> get();