在另一篇SO帖子中,以下示例作为对OP的响应给出:
public static <E> void funct1(final List<E> list1, final E something)
{
list1.add(something);
}
public static void funct2(final List<?> list, final Object something)
{
list.add(something); // does not compile
}
Run Code Online (Sandbox Code Playgroud)
我已经验证了funct1编译,而funct2没有编译.但是,我无法弄清楚原因.
A List<?>是特定但未知类型的列表.编译器不允许对具有泛型类型参数的方法进行调用,因为无法保证类型安全.它可能是a List<Integer>或a List<Foo>,而且不应该添加一个Object.编译器必须使用编译器错误来阻止此调用,以保留泛型提供的类型安全性.
该方法funct1编译因为你总是可以添加E一个List<E>; 它是相同的类型参考:E.