通过反射调用指定属性
-
在反射机制中,可以直接通过 Field 类操作类中的属性,通过 Field 类提供的 set() 和 get() 方法就可以完成设置和取得属性内容的操作。
-
返回此 Class 对象表示的类或接口的指定 public(公有的)Field:
public Field getField(String name)
-
返回此 Class 对象表示的类或接口的指定的 Field:
public Field getDeclaredField(String name)
-
-
在 Field 中:
-
取得指定对象 obj 上此 Field 的属性内容
public Object get(Object obj)
-
设置指定对象 obj 上此 Field 的属性内容
public void set(Object obj,Object value)
-
-
注意:在此类属性都设置为 private 的前提下,在使用 set() 和 get() 方法时,首先要使用 Field 类中的 setAccessible(true) 方法将需要操作的属性设置为可以被外部访问。
-
访问私有属性时,让这个属性可见
public void setAccessible(true)
-
调用公有属性
Class cla = Class.forName("com.aze.reflection.Student");
//反射创建一个对象
Constructor con = cla.getConstructor();
Student stu = (Student) con.newInstance();
//获取名为 school 的公有属性
Field fie = cla.getField("school");
//设置属性的值
fie.set(stu,"一中");
//获取属性的值
String sch = (String) fie.get(stu);
System.out.println(sch);
调用所有属性(可以调用私有的)
- 获取到指定的私有属性时,需要解除私有的封装。
Class cla = Class.forName("com.aze.reflection.Student");
//反射创建对象
Constructor con = cla.getConstructor();
Student stu = (Student) con.newInstance();
//获取名为 privateField 的所有的属性(包括共有私有)
Field fie = cla.getDeclaredField("privateFiled");
//解除私有封装
fie.setAccessible(true);
//设置属性的值
fie.set(stu,"123abc");
//获取属性的值
String s = (String) fie.get(stu);
System.out.println(s);