利用反射做通用框架
需求
给你任意一个对象,在不清楚对象字段的情况可以,可以把对象的字段名称和对应值存储到文件中去。
分析
1.定义一个方法,可以接收任意类的对象。
2.每次收到一个对象后,需要解析这个对象的全部成员变量名称。
3.这个对象可能是任意的,那么怎么样才可以知道这个对象的全部成员变量名称呢?
4.使用反射获取对象的Class类对象,然后获取全部成员变量信息。
5.遍历成员变量信息,然后提取本成员变量在对象中的具体值
6.存入成员变量名称和值到文件中去即可。
1. 创建学生类 老师类 提供get set方法 学生和老师有一些独有方法
2.核心
public class MybatisUtil {
/**
保存任意类型的对象
* @param obj
*/
public static void save(Object obj){
try (PrintStream ps = new PrintStream(new FileOutputStream("junit-reflect-*****"));){
//1.提取这个对象的全部成员变量, 只有反射可以解决
Class c = obj.getClass();
ps.print("========"+c.getSimpleName()+"=========");
//2.提取它的全部成员变量
Field[] fields = c.getDeclaredFields();
//3.获取成员变量的信息
for (Field field :fields) {
String name = field.getName();
//提取本成员变量在obj对象中的值
field.setAccessible(true);
String value = field.get(obj)+"";
ps.print(name+"="+value);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
===
测试
public class ReflectDemo {
public static void main(String[] args) throws Exception {
Student s = new Student();
s.setName("猪八戒");
s.setClassName("西天跑路1班");
s.setAge(1000);
s.setHobby("吃,睡");
s.setSex('男');
MybatisUtil.save(s);
Teacher t = new Teacher();
t.setName("波仔");
t.setSex('男');
t.setSalary(6000);
MybatisUtil.save(t);
}
}