1

我想加载一个通用列表。因此我想使用如下函数:

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

如果您可以看到我想要获取类型(“T”),以搜索具有这些扩展名的文件。但如果我打电话:

StorageUtil.<MyClass>load();

我得到一个异常,而不是将“MyClass”作为文件扩展名。我的代码有什么问题?

4

1 回答 1

8

T问题是 Java 中的泛型不是这样工作的——由于类型擦除,你在执行时找不到类型。如果在执行时需要该类型,可以添加一个Class<T>参数:

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

有关更多信息,请参阅类型擦除的 Java 泛型常见问题解答条目

于 2013-05-04T16:09:43.637 回答