一个通用的设置某个对象的某个属性为指定的值)
* A:案例演示
* public void setProperty(Object obj, String propertyName, Object value){},此方法可将obj对象中名为propertyName的属性的值设置为value。
###10_反射(读取配置文件并赋值)
* A:案例演示
* 从properties文件中读取一个类和类的成员变量信息,通过反射机制构建该类对象,并且完成成员变量的赋值操作
zhidisoft.className=com.zhidisoft.bean.Student
no=10003
name=\u5F20\u4E09
age=20
id=1
package com.zdsoft.yanshe.copy;
import com.zdsoft.beiyanshe.Student;
public class yanshe
{
public static void main(String[] args) throws Exception
{
//从字节码阶段返回 class对象
Class st=Student.class;
//创建对象阶段获取class对象
Student stu = new Student();
//通过这对象获取这个对象的class对象
Class st1 = stu.getClass();
//源码阶段获取class对象 需要文件的地址
Class<?> st2= Class.forName("com.zdsoft.beiyanshe.Student");
//获取包装类对象的Class
Class i= Integer.TYPE;
Class ii= int.class;
System.out.println(st==st1);
System.out.println(st1==st2);
System.out.println(i==ii);
}
}
---------------------------工具类-------------------------------
package com.zdsoft.utils;
import java.lang.reflect.Field;
public class Tools
{
public static void chou(Object dx,String mz,Object value) throws Exception, SecurityException
{
//获取字节码文件
Class c1 = dx.getClass();
//获取对象的属性
Field fi = c1.getDeclaredField(mz);
//获取权限
fi.setAccessible(true);
//写入值
fi.set(dx, value);
}
}
------------------暴力反射-------------------
package com.zdsoft.yanshe.copy;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import com.zdsoft.beiyanshe.Student;
import com.zdsoft.utils.Tools;
public class baolifanshe
{
public static void main(String[] args) throws Exception, SecurityException
{
//获取字节码
Class stu= Student.class;
//得到有参构造器
Constructor con = stu.getConstructor(String.class,int.class);
//实例化对象
Student s = (Student) con.newInstance("张三",20);
System.out.println(s);
//通过暴力反射得到对象的 不管共有私有的方法
Field f = stu.getDeclaredField("name");
//让对象的私有属性修改权限对自己开放;
f.setAccessible(true);
//修改对象的属性值
f.set(s, "李四");
System.out.println(s);
//获取对象的方法
Method method = stu.getMethod("chi", int.class);
//调用方法
method.invoke(s, 3);
//泛型去限制
ArrayList<Integer> list = new ArrayList();
list.add(1);
Class cla1 = list.getClass();
Method m2 = cla1.getMethod("add", Object.class);
m2.invoke(list, "hahah");
System.out.println(list);
Tools tools = new Tools();
tools.chou(s, "name", "哈哈");
tools.chou(s, "age", 55);
System.out.println(s);
}
}
------------------作用对象--------------
package com.zdsoft.beiyanshe;
public class Student
{
private String name;
private int age;
//给对象get set方法
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 Student(String name, int age)
{