前言
在Java开发中,遇到过这样一个需求,那就是如何在不了解外部Excel结构的情况下,实现将Excel的每行数据导入到系统表中。实现思路是这样的,要想导入Excel,就要先将Excel中的每列数据与已知的数据库表做一一对应(映射),那么如何才能在页面上呈现表结构呢?没错,就是通过反射机制。
什么是反射?
正常我们创建一个类,是在类中定义属性和方法,从而能够编译得到一个class文件,那么,将这个过程反过来,我们已知class类,来获取该类的属性和方法,就是反射。
反射的运用
1、定义一个student.class类
public class Student {
@ProCnName(cnName="学生ID")
private String id;
}
2、通过student.class获取学生的属性
Class studentClass=Class.forName("com.student.");
Field[] studentFields = studentClass.getDeclaredFields();
3、遍历每一项,将field与cell对应起来
for(Field pf:productfFields){
Object ooObject= entry.getValue();
String str0 = ooObject.toString();
String pfString = pf.getName();
}
4、通过Excel文件构造单元格:
Map.Entry entry =(Entry)iterator.next();
Cell cell = row.getCell((Integer)entry.getKey());
5、通过cell和field的对比做列对应
if(entry.getValue().equals(pf.getName())){
//这里面通过获取单元格的类型,来判断如何获取单元格的值,并将取到的值赋予给Student对象
}
结语
简单的一句话,就是通过类而取得该类中的属性和方法,就是反射。日常使用不是特别多,大家记住这种思路就好,什么时候用到了,再从这种思路上去想。