我有一个功能
public static void bar (final List<List<?>> list)
{
}
我可以用通配符 ( <?>
)调用
bar(new ArrayList<List<?>>());
但不是其他类型(例如String
)
// The method bar(List<List<?>>) in the type Foo is not
// applicable for the arguments (ArrayList<List<String>>)
bar(new ArrayList<List<String>>());
然而,这适用于类似的功能
public static void foo(List<?> l)
{
}
public static void main(String[] args)
{
// no error
foo(new ArrayList<String>());
}
您能否解释一下,为什么编译器在第一种情况下抱怨,而在第二种情况下却没有?