Java反射之类成员

上一篇文章我们讲了怎么获取到类的标识符,比如类的访问权限、接口标识、static标识,final标识、strictfp标识等,下面我们继续跟着官方文档讲解一下怎么获取类的成员,类成员包括以下三种:成员变量、类方法(实例方法和类方法)、构造器(构造方法)。

获取方式

为了更好的描述,我们做个约定个通配符XXXX,如果是成员变量就代表Field,如果是类方法就代表Method,如果是构造器就代表Constructor。
那么怎么获取到这三类成员呢?
获取单个的成员的方式用: getXXXX()和getDeclaredXXXX();
列举多个成员的方式用: getXXXXs()和getDeclaredXXXXs();

getXXXX和getDeclared的区别

那么他们有什么区别呢?
简单的来说普通的方式(不带Declared)获取类的公共(public)的成员,包括父类,带有Declared的方式获取类的所有申明的成员,即包括public、private和protected声明的成员,不包括父类的申明字段。
那么就有人疑问那怎么获取到父类的成员呢?当然是获取到父类的Class之后,通父类的Class调用这两类方法获取。
普通的方式是比较常用的方式,反射本身就破坏封装的一种方式,为了减少这种破坏,我们应该操作public成员即可。
具体的区别如下:

获取成员变量

Class的API方法 是否可以列举 是否能列举继承类的成员 是否能列举私有成员
getDeclaredField()
getField()
getDeclaredFields()
getFields()

获取成员方法

Class的API方法 是否可以列举 是否能列举继承类的成员 是否能列举私有成员
getDeclaredMethod()
getMethod()
getDeclaredMethods()
getMethods()

获取构造器

Class的API方法 是否可以列举 是否能列举继承类的成员 是否能列举私有成员
getDeclaredConstructor()
getConstructor()
getDeclaredConstructors()
getConstructors()

类成员的Class

getXXXX()和getDeclaredXXXX()获取到的类也就是类成员的Class,对应的Class如下.
成员变量: java.lang.reflect.Field
成员方法: java.lang.reflect.Method
构造器方法: java.lang.reflect.Constructor
后面会分为三章分别解释一下对应的用法。

发布了131 篇原创文章 · 获赞 35 · 访问量 26万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章