2013-05-04 73 views
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的」爲fileExtension例外。我的代碼有什麼問題?

+0

'我得到一個異常[...]' - 請顯示堆棧跟蹤! – home 2013-05-04 16:09:21

回答

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