我不遵循为什么此代码显示此编译错误。
错误是:
Type mismatch: cannot convert from TestClass.Wrapper<List<capture#1-of ?>> to TestClass.Wrapper<List<?>>
代码如下。
package test.cls;
import java.util.List;
public class TestClass
{
static abstract class Wrapper<A>
{
public abstract A wrapped();
}
public static <A> Wrapper<A> wrap(final A val)
{
return new Wrapper<A>()
{
public A wrapped()
{
return val;
}
};
}
public static void main(final String[] args)
{
final List<?> list = null;
final Class<?> c = null;
final Wrapper<List<?>> wrapList = wrap(list); // Error here
final Wrapper<Class<?>> wrapC = wrap(c); // Error here
}
}
答案 0 :(得分:5)
编译器的泛型类型推断阻塞了嵌套通配符捕获。您需要显式指定类型参数:
final Wrapper<List<?>> wrapList = TestClass.<List<?>>wrap(list);
final Wrapper<Class<?>> wrapC = TestClass.<Class<?>>wrap(c);