メソッドからジェネリック コレクションを返すイディオムは次のようなものです。
public <T> List<T> getTheList(Class<T> cls){
// you might need the cls in here to create the list.
...
}
を使用してリストを生成する方法は、明らかにClass<T>
アプリケーション固有です。ほとんどの場合、これはいくつかのクラス階層のコンテキストで意味があり、その場合、T
いくつかの基本クラスまたはインターフェースを拡張します。
public <T extends MyBaseClassOrInterface> List<T> getTheList(Class<T> cls){
...
}
ここでも、リストの作成方法は完全にアプリケーションに依存します。アプリケーション全体を強く型付けしたままにしようとすると、 の型パラメーターを把握するために何らかの黒魔術を行うことを回避できる場合がありますList<?>
。そのようなコードになってしまうと、それは強いコード臭です (明らかにレガシー コードを扱っている場合を除きます)。さらに、リストが空の場合は、まったく絶望的です。