在我看来,它应该工作,但它没有。为什么?源代码:
package javaapplication1;
import java.util.*;
class A
{
public static <K,V> Map<K,V> map()
{
return new HashMap<K,V>();
}
}
class Person {}
class Dog {}
public class JavaApplication1
{
static void f(Map<Person, List<? extends Dog>> peopleDogList) {}
public static void main(String[] args)
{
f(A.<Person, List<Dog>>map());
}
}
非常简单的代码。编译器错误:类 JavaApplication1 中的方法 f 不能用于指定类型;必需:Map<Person, List<? extends Dog>
找到:Map<Person, List<Dog>>
原因:Map<Person, List<Dog>>
无法Map<Person, List<? extends Dog>
通过方法调用转换将实际参数转换为。
Map<Person, List<? extends Dog>
更通用,所以编译器应该可以转换?
还有这个:Map<Person, List<? extends Dog>> peopleDogList = A.<Person, List<Dog>>map();
不起作用。? extends Dog
表示继承Dog
or的对象Dog
,所以单词Dog
应该可以吗?