Reflection--获取运行时类的指定信息

来源:互联网 发布:精雕5.5软件下载 编辑:程序博客网 时间:2024/05/22 04:59

   这里主要讲解获取运行时类的特定的属性和类的特定的方法:

获取运行时类的对象的属性:

getFields方法和getDeclardFields


结果:


对于获取到的属性的赋值:通过getset方法

  • Field中:
  • public Object get(Object obj)取得指定对象obj上此Field的属性内容
  • public void set(Object obj,Object value)设置指定对象obj上此Field的属性内容

注意:

person中我们对于私有的属性age的获取,我们是无法直接对age进行setget的操作。

注:在类中属性都设置为private的前提下,在使用set()和get()方法时,首先要使用Field类中的setAccessible(true)方法将需要操作的属性设置为可以被外部访问。

publicvoid setAccessible(true)访问私有属性时,让这个属性可见。

本来ageperson的私有属性,这是类的封装性(Public,private),但是现在我们打破了类的封装性。


通过反射调用类中指定的方法:

通过反射,调用类中的方法,通过Method类完成。步骤:

1.通过Class类的getMethod(Stringname,Class…parameterTypes)方法取得一个Method对象,并设置此方法操作时所需要的参数类型。这个是获取运行时类中声明为public的方法。

2.之后使用Object invoke(Object obj, Object[] args)进行调用,并向方法中传递要设置的obj对象的参数信息

Invoke()说明:

说明:

   1.Object 对应原方法的返回值,若原方法无返回值,此时返回null

    2.若原方法若为静态方法,此时形参Object obj可为null

    3.若原方法形参列表为空,则Object[] argsnull

    4.若原方法声明为private,则需要在调用此invoke()方法前,显式调用方法对象的setAccessible(true)方法,将可访问private的方法


结果:


    我们在前面强调的运行时类是反射的基础。在这里应该可以体会出来了吧。如果没有运行时类,我们的这行属性,方法就没有办法获取。

0 0
原创粉丝点击