通用集合 - java

这是Java(1.6)集合接口的一部分:

public interface Collection<E> extends java.lang.Iterable<E> { 
    /* ... */   
    boolean containsAll(java.util.Collection<?> objects);    
    boolean addAll(java.util.Collection<? extends E> es);    
    boolean removeAll(java.util.Collection<?> objects);    
    boolean retainAll(java.util.Collection<?> objects);
    /* ... */   
}

为什么addAll<? extends E>removeAll<?>

参考方案

我不知道,我用谷歌搜索。我在这里得到了这样的解释:http://www.ibm.com/developerworks/java/library/j-jtp01255/index.html

复制零件:

最初,通常使混淆的Collections API的一个元素是containsAll(),removeAll()和retainAll()的签名。您可能期望remove()和removeAll()的签名为:

interface Collection<E> { 
  public boolean remove(E e);  // not really
  public void removeAll(Collection<? extends E> c);  // not really
}

但这实际上是:

interface Collection<E> { 
  public boolean remove(Object o);  
  public void removeAll(Collection<?> c);
}

为什么是这样?同样,答案在于向后兼容性。 x.remove(o)的接口协定表示“如果x中包含o,则将其删除;否则,什么也不做。”如果x是泛型集合,则o不必与x的类型参数类型兼容。如果将removeAll()泛型化为仅在其参数为类型兼容类型(Collection<? extends E>)时才可调用,则在泛型之前合法的某些代码序列将变为非法,例如:

// a collection of Integers
Collection c = new HashSet();
// a collection of Objects
Collection r = new HashSet();
c.removeAll(r);

如果上述片段以明显的方式生成(将c变成Collection<Integer>和r变成Collection<Object>),则如果removeAll()的签名要求其参数为Collection<? extends E>而不是no-op,则上面的代码将无法编译。泛化类库的主要目标之一是不破坏或更改现有代码的语义,因此remove(),removeAll(),retainAll()和containsAll()的类型约束必须比其弱。可能是从头开始为泛型重新设计了它们。

Java中的<<或>>>是什么意思? - java

This question already has answers here: Closed 7 years ago. Possible Duplicate: What does >> and >>> mean in Java?我在一些Java代码中遇到了一些陌生的符号,尽管代码可以正确编译和运行,但对于括号在此代码中的作用却感…

与哪些运算符>>兼容 - java

我这里没有什么代码int b=3; b=b >> 1; System.out.println(b); 它可以完美工作,但是当我将变量b更改为byte,short,float,double时,它包含错误,但是对于变量int和long来说,它可以完美工作,为什么它不能与其他变量一起工作? 参考方案 位移位运算符(例如>>)与任何整数类型兼…

通过Maven编译器插件不会发生有限的包含和排除 - java

我正在使用3.6.0版的maven编译器插件,在此我们只想在特定文件夹中编译一个文件,而在该位置编译所有其他文件。例如:在文件夹应用程序中有14个文件,从那我只希望编译1个文件,但它编译了所有文件,如果我要排除,则它也不起作用。 <sourceDirectory>${basedir}/../src/java</sourceDirectory…

Java中的“ <<”运算符 - java

最喜欢的语句来自Java的Character类:(1 << Character.PARAGRAPH_SEPARATOR)) >> type PARAGRAPH_SEPARATOR是字节,type是整数。这句话中的操作员,他们做什么?如何以及在哪里可以使用这些运算符?这是oracles java.lang.Character文档。该类中…

休眠映射<键,设置<值>> - java

我有以下表格:@Entity @Table(name = "events") Event --id --name @Entity @Table(name = "state") State --id --name @Entity @Table(name = "action") Action --id …