Java集合接口addAll()方法签名
如果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的签名更加复杂。使用此测试界面:
<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);
}