如果您将类型作为方法参数传递,则可以。
static <T> List<T> createEmptyList( Class<T> type ) {
return new ArrayList<T>();
}
@Test
public void createStringList() {
List<String> stringList = createEmptyList( String.class );
}
方法不能以与类型相同的方式进行泛化,因此具有动态类型泛型返回类型的方法的唯一选择 - 唷,这是一个拗口的 :-) - 是将类型作为参数传递。
有关 Java 泛型的真正出色的常见问题解答,请参阅 Angelika Langer 的泛型常见问题解答。
.
.
跟进:
在这种情况下使用数组参数是没有意义的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 ] );
}