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 番目のバージョンはややこしいですが、おそらくより政治的に正しいでしょう。