1.主类 package s0401反射实例自动填充; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) throws Exception { //资料库 Map data=new HashMap(); data.put("name","fengwei"); data.put("age","19"); data.put("tel","909"); //获得className 字符串的实例对象 Class s=Class.forName("s0401反射实例自动填充.Users"); //调用forName("X") 将导致名为 X 的类被初始化。properties中存放的是类的名称 //对象实例化 Object obj=s.newInstance(); //自动填充数据 autoFile(obj,data); //输出获得的实例对象 System.out.println(obj); } private static void autoFile(Object obj, Map data) throws IllegalArgumentException, IllegalAccessException { //获得填充数据中的所有字段,然后将此字段在数据源data中查询,如果有则填充 //获得字节码对象 Class a=obj.getClass(); //获得所有的私有字段 Field[] fields=a.getDeclaredFields(); for(Field f:fields) { //在资料库中获得需要的数据 String value=data.get(f.getName());//在资料库中查找有没有对应要填充的字段 //强制设置权限,不然无法改变值 f.setAccessible(true); //如果有需要的字段就填充到obj中 if(value!=null) { f.set(obj, value);//填充值 } } } } 2.User类 package s0401反射实例自动填充; public class User { private String name; private String age; private String tel; public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } @Override public String toString() { return "User [name=" + name + ", age=" + age + ", tel=" + tel + "]"; } }