2012-01-31 4 views
2

У меня есть общий Methode как этот:Как получить класс универсального типа

public class ClassName { 
    public <T> List<T> methodeName(String path) 
     throws FileNotFoundException { 
    CSVReader reader = new CSVReader(new FileReader(path), ',', '\"'); 

    HeaderColumnNameTranslateMappingStrategy<T> strat = new HeaderColumnNameTranslateMappingStrategy<T>(); 

    strat.setType(T.class); 

В последней строке (T.class) затмение показывает мне эту synthax-ошибку Illegal class literal for the type parameter T.

Решение, подобное этому, предлагается здесь: Java generics - retrieve type не поможет. Метод getClass() только вернет текущий класс.

Я новичок в дженериках, но я уверен, что есть простой ответ на этот вопрос.

ответ

8

Простой ответ: вы должны передать аргумент Class<T> методу.

public <T> List<T> methodeName(String path, Class<T> clazz) throws FileNotFoundException { 
    CSVReader reader = new CSVReader(new FileReader(path), ',', '\"'); 

    HeaderColumnNameTranslateMappingStrategy<T> strat = 
     new HeaderColumnNameTranslateMappingStrategy<T>(); 
    strat.setType(clazz); 
} 

... 

ClassName cn = new ClassName(); 
List<Foo> foos = cn.methodeName(somePath, Foo.class); 
+0

Как инициализировать этот класс объект? – justSaid

+0

См. Мой отредактированный ответ –

+0

Thx, он работает! Но не должно быть способа получить класс от ? Я имею в виду, действительно ли мне нужно изменить подпись метода, чтобы выполнить это? – justSaid

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