在Java泛型参数中使用父类
我不明白Java中的泛型是如何完全工作的。我有类似的情况,我在下面的代码中进行了简化:
public static void main(String[] args) {
Map<String, Collection<B>> map1 = test();
Map<String, List<B>> map2 = test();
Map<String, ArrayList<B>> map3 = test();
}
private static Map<String, ArrayList<B>> test() {
return null;
}
在创建map1或map2时,我遇到一个错误,显示类型不兼容——它应该是ArrayList,但得到的是Collection/List
我该如何解决这样的问题
# 1 楼答案
下面是将成功编译的代码:
您需要添加},因此{}
? extends Collection<B>
和? extends List<B>
,因为写入? extends Collection
意味着Object
构成Map
的value
是Collection
类的^test()
将被调用,因为它还返回一个Map
类型为^还要注意,您需要在
main
和test()
的签名中添加<B>
希望有帮助