有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java获取泛型类型T的declaredFields

我有一个泛型类,定义如下:

 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,有什么方法可以做到这一点吗


共 (2) 个答案

  1. # 1 楼答案

    您应该将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();
        }
    }
    
  2. # 2 楼答案

    向构造函数添加字段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