我想加载一个通用列表。因此我想使用像:
这样的函数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。我的代码出了什么问题?
答案 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。