利用反射做通用框架

需求

给你任意一个对象,在不清楚对象字段的情况可以,可以把对象的字段名称和对应值存储到文件中去。

 

分析

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);
}
}

posted on 2022-04-05 12:54  我要当程序源  阅读(61)  评论(0编辑  收藏  举报

导航