unmodifiableCollection
間違っていると思います。Collection<T>
どちらのメソッドもas としてラップするつもりCollection<T>
であり、型引数を変更する理由はありません。
確かに、 a を取り込む方がより柔軟であるため、呼び出し元は aを変更不可能なorなどCollection<? extends T>
に変換するように要求できます。しかし、誰がそれを必要とするのでしょうか? 読み取り専用は、とにかくよりもあらゆる点で優れています。Collection<Integer>
Collection<Integer>
Collection<Number>
Collection<Object>
Collection<Integer>
Collection<Number>
入力タイプ自体にワイルドカードが含まれている場合、たとえば
Collection<? extends Number> someNumbers = ...;
私たちunmodifiableCollection(Collection<? extends T>)
にできること
Collection<Number> readonlyNumbers
= unmodifiableCollection(someNumbers);
Collection<Object> readonlyObjects
= unmodifiableCollection(someNumbers);
しかし、unmodifiableCollection2(Collection<T>)
私たちはしなければなりません
Collection<? extends Number> readonlyNumbers
= unmodifiableCollection2(someNumbers);
Collection<? extends Object> readonlyObjects
= unmodifiableCollection2(someNumbers);
2 番目のバージョンはややこしいですが、おそらくより政治的に正しいでしょう。