Android Coder 带你了解反射
前言
一般情况下,在使用某个类时必定清楚是什么类,作用是什么。使用时就直接对类进行实例化,调用对象进行操作。但在部分场景下开发时,开始并不知道操作类具体是什么,在运行时才知道具体类,并需要调用其方法,这就要使用反射来获取目标类的构造器,创建对应类对象,调用对应方法。
本篇就来说说反射知识。
概览
Class 类
Class 封装了当前对象所对应的类信息,每一个普通类都可以看成一个对象,是 java.lang.Class 类的对象,Class 是描述类的类(有点拗口)
获取 Class 对象
有 3 种获取 Class 对象的方式:
通过类名获取=> 类名.class
通过对象名获取=> 对象名.getClass()
通过全类名获取=> Class.forName(全类名) //类全名:加上包名路径 如:com.any.bean.User
创建实例
反射方式生成对象的实例:
获取构造器
获取构造器的方式:
Constructor getConstructor(Class[] params)获得使用指定参数类型的 public 构造函数
Constructor[] getConstructors():获得类所有公共构造函数
Constructor getDeclaredConstructor(Class[] params):获得使用特定参数类型的构造函数(包括私有)
Constructor[] getDeclaredConstructors():获得类的所有构造函数
新建一个 Person
类,有私有属性和方法:
新建GetConstructor
类来获取构造器:
输出结果:
获取方法
获取方法有如下方式:
Method getMethod(String name, Class[] params):使用特定的参数类型,获得命名的公共方法
Method[] getMethods():获取类所有公共方法
Method getDeclaredMethod(String name, Class[] params):通过指定参数类型,获取类声明方法
Method[] getDeclaredMethods():获得类声明方法
用GetMethod
获取和调用方法:
运行结果,如下:
获取成员变量
获取成员变量的方式:
Field getField(String name):获取指定名称的公共字段
Field[] getFields():获取所有公共字段
Field getDeclaredField(String name)`:获取类声明命名字段
`Field[] getDeclaredFields():获取类声明所有字段
用 GetField
获取成员变量:
运行结果:
总结
Java 反射机制主要提供:
运行时构造一个类的对象
运行时获取任意一个类所具有的成员变量和方法
在运行时调用任意一个对象的方法(属性)
版权声明: 本文为 InfoQ 作者【子不语Any】的原创文章。
原文链接:【http://xie.infoq.cn/article/616f63716eb0bc3a2861ecb30】。文章转载请联系作者。
评论