面试题8:如何通过反射访问属性和方法?

2023-05-09 21:34:01 浏览数 (1)

在“面试题7”中,已经介绍了我们使用反射的3个步骤,分别是:获取Class对象——>获得构造方法Constructor对象——>调用newInstance方法来创建对象实例。

既然我们已经掌握了如何通过反射获得实例对象的方法。那么,我们如果通过反射去访问属性和方法呢?



【访问属性】

我们可以通过getField和getDeclaredField这两种方法来访问属性,它们之间的差异如下所示:

  • getField 只能获取public的,包括从父类继承来的字段。
  • getDeclaredField 可以获取本类所有的字段,包括private的,但是不能获取继承来的字段。(注:这里只能获取到private的字段,但并不能访问该private字段的值,除非加上setAccessible(true))


【访问方法】

我们可以通过getMethod和getDeclaredMethod这两种方法来访问方法,它们之间的差异点参照getField和getDeclaredField。


【访问非public的属性和方法】

如果我们需要访问非public的属性和方法,我们需要为Field或Method实例设置setAccessible(true),否则无法进行访问。


综上所示,我们可以看下面代码示例:

0 人点赞