2012-01-31 18 views
2

的我有一个通用的梅索德像这样的:如何检索类通用型

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 2012-01-31 13:00:53

+0

请参阅我编辑的答案 – 2012-01-31 13:08:38

+0

Thx,它的工作!但是不应该有办法从获得课程吗?我的意思是我真的不得不改变方法的签名来完成这个吗? – justSaid 2012-01-31 13:18:43