タイプをメソッドパラメータとして渡すと、可能になります。
static <T> List<T> createEmptyList( Class<T> type ) {
return new ArrayList<T>();
}
@Test
public void createStringList() {
List<String> stringList = createEmptyList( String.class );
}
メソッドは型と同じ方法でジェネリック化することはできないため、動的に型付けされたジェネリックリターン型(一口です:-)-を持つメソッドの唯一のオプションは、型を引数として渡すことです。
Javaジェネリックに関する本当に優れたFAQについては、AngelikaLangerのジェネリックFAQを参照してください。
。
。
ファローアップ:
このコンテキストでは、のように配列引数を使用することは意味がありませんCollection.toArray( T[] )
。配列が使用される唯一の理由は、同じ(事前に割り当てられた)配列が結果を含むために使用されるためです(配列がすべてに収まるほど大きい場合)。これにより、実行時に常に新しいアレイを割り当てる必要がなくなります。
ただし、教育の目的で、配列型を使用したい場合、構文は非常に似ています。
static <T> List<T> createEmptyList( T[] array ) {
return new ArrayList<T>();
}
@Test
public void testThing() {
List<Integer> integerList = createEmptyList( new Integer[ 1 ] );
}