Java集合接口addAll()方法签名

Java集合接口addAll()方法签名,java,generics,collections,Java,Generics,Collections,如果Java集合接口有这样的addAll方法签名,会有什么区别 <T extends E> boolean addAll(Collection<T> c); boolean addAll(集合c); 而不是 boolean addAll(Collection我认为这不会编译。一个方法不能同时有两种返回类型(和boolean)。在这种情况下,拥有或对于addAll的用户是等效的 我认为前一种符号是为了清晰起见,因为使用会使addAll的签名更加复杂。使用此测试界面:

如果Java集合接口有这样的addAll方法签名,会有什么区别

 <T extends E> boolean addAll(Collection<T> c);
boolean addAll(集合c);
而不是
boolean addAll(Collection我认为这不会编译。一个方法不能同时有两种返回类型(
boolean
)。

在这种情况下,拥有
对于
addAll
的用户是等效的


我认为前一种符号是为了清晰起见,因为使用
会使
addAll
的签名更加复杂。

使用此测试界面:

public interface DumbTestInterface<E> {

    <T extends E> boolean addAll1(Collection<T> c);

    boolean addAll2(Collection<? extends E> c);

}
公共接口DumbTestInterface{
布尔addAll1(集合c);

boolean addAll 2(集合问题是,
boolean addAll(集合c)中的
T
是完全不必要的,因为
addAll
不关心它所提供的集合包含
E
的特定子类型。它所关心的是它所提供的集合包含
E
的某些子类型,这正是
collection如果使用显式类t,则无法传递通配符d收集到方法,这是您可能想要做并且应该能够做的事情。

基本上,当类型变量
T
仅在参数类型中的某个位置使用时,您可以安全地将其更改为

不是返回类型。它是泛型类型。这不符合我的问题仍然存在。谢谢
// Compiled from DumbTestInterface.java (version 1.6 : 50.0, no super bit)
// Signature: <E:Ljava/lang/Object;>Ljava/lang/Object;
public abstract interface rumba.dumba.DumbTestInterface {

  // Method descriptor #6 (Ljava/util/Collection;)Z
  // Signature: <T:TE;>(Ljava/util/Collection<TT;>;)Z
  public abstract boolean addAll1(java.util.Collection arg0);

  // Method descriptor #6 (Ljava/util/Collection;)Z
  // Signature: (Ljava/util/Collection<+TE;>;)Z
  public abstract boolean addAll2(java.util.Collection arg0);
}