我有一个定义如下的泛型类:
public class ExcelParser<T> {
private Workbook workbook;
public ExcelParser(InputStream is){
workbook = new HSSFWorkbook(new POIFSFileSystem(new ByteArrayInputStream(bytes)));
}
public List<T> retrieveRecordList() {
Field[] fields = T.class.getDeclaredFields();// here will give a error
}
}
我尝试做的是编写一个云解析excel记录到javabean list
的泛型类,但我无法从泛型类型T获取declaredFields
,有没有办法那样做?
答案 0 :(得分:6)
您应该将Class<T>
存储在ExcelParser
类中,以便在运行时获取有关T
的元信息:
public class ExcelParser<T> {
private Workbook workbook;
private Class<T> clazz;
public ExcelParser(InputStream is, Class<T> clazz) {
workbook = new HSSFWorkbook(new POIFSFileSystem(new ByteArrayInputStream(bytes)));
this.clazz = clazz;
}
public List<T> retrieveRecordList() throws Exception {
Field[] fields = clazz.getDeclaredFields();
}
}
答案 1 :(得分:0)
向构造函数添加字段classT和伪参数。
public class ExcelParser<T> {
private Workbook workbook;
private final Class<?> classT;
@SafeVarargs
public ExcelParser(InputStream is, T... dummyArguments){
workbook = new HSSFWorkbook(new POIFSFileSystem(new ByteArrayInputStream(bytes)));
classT = dummyArguments.getClass().getComponentType();
System.out.println(classT);
}
并且在没有dummyArguments的情况下调用构造函数。
ExcelParser<Baz> parser = new ExcelParser<>(is /* no dummyArguments */);
classT
已分配给Baz.class
。