ジェネリックメソッドのチュートリアルには、次の便利な例があります。
public <T extends E> boolean addAll(Collection<T> c);
ただし、[...]タイプパラメータTは1回だけ使用されます。戻り型は型パラメーターに依存せず、メソッドに対する他の引数にも依存しません(この場合、引数は1つだけです)。[...]その場合は、ワイルドカードを使用する必要があります。
私が取り組んでいるプロジェクトのコードベースには、次のようないくつかのメソッドがあります。
public <T extends Something> T getThing();
および(同じインターフェースではありません)
public <D> void storeData(int id, D data);
Something
バウンド(上、Object
下)を直接使用する代わりに、メソッドタイプパラメータを使用することに意味はありますか?
(前者の場合、いくつかの実装にはすべて注釈が付けられて@SuppressWarnings("unchecked")
おり、メソッドのユーザーからこの警告を隠すことがポイントになる可能性がありますが、これが称賛に値する成果であるかどうかはわかりません。後者の場合、一部の実装はリフレクションを使用して、異なるクラスのインスタンスを異なる方法で格納しますが、typeパラメーターによってこれがどのように促進されるかはわかりません。)