反射——调用类中的指定属性

通过反射调用指定属性

  • 在反射机制中,可以直接通过 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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值