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。
我该如何解决这个问题?
- 你可能想看看之前关于这个问题的问题:为什么我们不能做listmylist=arraylist();。如何将父类型列表强制转换为子类型列表?
下面是将成功编译的代码:
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意味着构成Map的value的Object是Collection类的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〕。
另请注意,您需要在main和test()的签名中添加。
希望它有帮助!