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();