在Java泛型参数中使用父类

Using parent classes in Java generics parameters

本问题已经有最佳答案,请猛点这里访问。

我不理解Java中的泛型是如何工作的。我在下面的代码中简化了类似的情况:

1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
    Map<String, Collection> map1 = test();
    Map<String, List> map2 = test();
    Map<String, ArrayList> map3 = test();
}

private static Map<String, ArrayList> test() {
    return null;
}

当创建map1或map2时,我得到一个错误,它指出不兼容的类型——它需要arraylist,但得到的却是collection/list。

我该如何解决这个问题?


下面是将成功编译的代码:

1
2
3
4
5
6
7
8
9
public static  void main(String[] args) {
    Map<String, ? extends Collection> map1 = test();
    Map<String, ? extends List> map2 = test();
    Map<String, ArrayList> map3 = test();
}

private static  Map<String, ArrayList> test() {
    return null;
}

你需要增加? extends Collection和EDOCX1 1〔1〕因为写? extends Collection意味着构成MapvalueObjectCollection类的sub type的,因此会调用test()因为它还返回一个Map的EDOCX11〔5〕的EDOCX11〔4〕是EDOCX11〔11〔11〕11〔11〔11〕11〔11〕的EDOCX11〔4〕的EDOCX11〔4〕是EDOCX11〔7〕类的EDOCX11〔6〕的,因此也会调用EDOCX11〔8〕因为它还返回一个EDOCX11〔5〕的EDOCX11〔5〕的EDOCX1类型,实际上是一个EDOCX1江户十一〔7〕的〔6〕。

另请注意,您需要在maintest()的签名中添加

希望它有帮助!