返回通用列表

时间:2013-05-04 16:05:06

标签: java generics generic-list

我想加载一个通用列表。因此我想使用像:

这样的函数
public static <T> List<T> load()
{
    FileInputStream fileStream = null;
    List<T> toReturn = new ArrayList<T>();
    String fileExtension = toReturn.getClass().getComponentType().getSimpleName();
    ...
}

如果你能看到我想获得Type(“T”),搜索带有这些扩展名的文件。但如果我打电话:

StorageUtil.<MyClass>load();

我得到一个Exception,而不是将“MyClass”作为fileExtension。我的代码出了什么问题?

1 个答案:

答案 0 :(得分:8)

问题是Java中的泛型不能以这种方式工作 - 由于类型擦除,在执行时无法找到T的类型。如果在执行时需要类型,则可以添加Class<T>参数:

public static <T> List<T> load(Class<T> clazz) {
    ... use class.newInstance() to create a new instance, etc
}

有关详细信息,请参阅Java Generics FAQ entry for Type Erasure