2013-05-04 4 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

ответ

8

Проблема в том, что дженерики в Java не работают таким образом - вы не можете найти тип T во время выполнения из-за типа erasure. Если вам нужен тип во время выполнения, вы можете добавить параметр 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 для получения дополнительной информации.

Смежные вопросы