Java 通用通配符不适用

Java 通用通配符不适用,java,generics,Java,Generics,我有一个函数 public static void bar (final List<List<?>> list) { } 但是,这适用于类似的功能 public static void foo(List<?> l) { } public static void main(String[] args) { // no error foo(new ArrayList<String>()); } publicstaticvoidfo

我有一个函数

public static void bar (final List<List<?>> list)
{
}
但是,这适用于类似的功能

public static void foo(List<?> l)
{
}

public static void main(String[] args)
{
    // no error
    foo(new ArrayList<String>());
}
publicstaticvoidfoo(列表l)
{
}
公共静态void main(字符串[]args)
{
//无误
foo(newarraylist());
}

请您解释一下,为什么编译器在第一种情况下抱怨,而在第二种情况下却没有抱怨?

您应该将您的方法声明为:

private void bar(final List<? extends List<?>> lists) {...}
void bar(final List<? extends List<?>> lists)

将需要一个定义完全是
list的参数。问题不是他应该如何做,而是为什么它不起作用!更新了解释。。。取消否决票?
private void bar(final List<? extends List<?>> lists) {...}
void bar (final List<List<?>> list)
void bar(final List<? extends List<?>> lists)