[java]代码库
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<String,String> data=new HashMap<String,String>();
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<String, String> 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 + "]";
}
}