---------------------- android培训、java培训、期待与您交流! ----------------------
对于一个Javabean可以通过实例化的形式得到对象,也可以通过反射的原理得到对象,并且给对象赋值
最基本的反射方法获取类字节码通过getClass方法获取
下面介绍通过反射直接给对象赋值。
先定义一个Student 的JavaBean
public class Student {
private String name;
private int age;
private String sex;
private Date birthday;
public Student(){}
public Student(String name,int age,Date birthday)
{
this.name=name;
this.age=age;
this.birthday=birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
package com.reflect; import java.util.List; import java.lang.reflect.Field; import java.util.Date; import java.text.SimpleDateFormat; import java.util.ArrayList; public class ReflectTest { public static void main(String[] args) throws RuntimeException, Exception { // 反射构造方法设定类中的值 Student s = Student.class.getConstructor( new Class[] { String.class, int.class, Date.class }) .newInstance(new Object[] { "李四", 32, new Date() }); System.out.println(s.getName() + "::" + s.getAge() + "::" + s.getBirthday()); // 反射实例化对象 Student stu = Student.class.newInstance(); //得到对象中所有field属性 //不用getMethods,因为javabean中还有其它继承至Object的方法 Field[] fieldName = stu.getClass().getDeclaredFields(); for (Field f : fieldName) { String name = f.getName(); //得到为set+属性的方法名 String methodName = "set" + name.substring(0, 1).toUpperCase() + name.substring(1); //直接给方法注入参数 if (int.class == f.getType()) { stu.getClass().getMethod(methodName, f.getType()).invoke(stu, 19); } if (String.class == f.getType()) { stu.getClass().getMethod(methodName, f.getType()).invoke(stu, "张三"); } if (Date.class == f.getType()) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date d = (Date) sdf.parse("1988-5-5"); stu.getClass().getMethod(methodName, f.getType()) .invoke(stu, d); } } System.out.println(stu.getName() + "::" + stu.getAge() + "::" + stu.getBirthday()); } }
这就说明了通过set方法赋值和构造函数传参数是一样的。这样做的好处在于,当你不知道这个类中有哪些属性时,都能设置进去,可以动态的加载一些SQL语句中查询出来的对象而不是将每行数据封装成一个固定的类
---------------------- android培训、java培训、期待与您交流! ----------------------