AbstractCollectionのaddAll()は次のように実装されます。
public boolean addAll(Collection<? extends E> c) {
boolean modified = false;
for (E e : c) if (add(e)) modified = true;
return modified;
}
したがって、パラメーターのcがたとえば 3 つの要素のコレクションである場合、これらの要素の最初の 2 つが追加されている可能性がありますが、3 つ目は何らかの理由で追加されていません。
この場合、addAll()操作 -- これら 3 つの要素すべての基礎となる Collection への追加は実行されず、addAll()は必要に応じて false を返します。しかし、最初の 2 つの要素はそこにあります。
HashSetは、このaddAll()をコレクション型の単一パラメーターを持つコンストラクターで使用しています。
そのため、開発者は、コレクション全体を探しているときに、コレクションの一部を含むHashSetインスタンスになってしまう可能性があります。そして、これは警告なしに発生します。
関連するメソッド ( HashMapのput()とHashSetのadd() )は十分に単純に見えますが、これらの操作中に何か問題が発生する可能性はないように見えますが、それでもなお.
ここで何か不足していますか?