从方法返回泛型集合的习惯用法类似于:
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<?>
. 如果您最终得到这样的代码(除非您显然正在处理一些遗留代码),那么这是一种强烈的代码气味。此外,如果列表是空的,你绝对没有希望。