安卓的反射运用

200 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情 >> 希望大家可以帮忙点个赞,谢谢!

引言

在我之前的几篇文章中曾反复提到反射这个概念,这是java的一个重要知识点,所以今天记录一下在安卓开发中如何写反射的。

反射概念

反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。
在计算机科学领域,反射是一类应用,它们能够自描述和自控制。
这类应用通过某种机制来实现对自己行为的描述和检测,并能根据自身行为的状态和结果,
调整或修改应用所描述行为的状态和相关的语义。

从我的开发经历来看,我们主要用反射将写在其他文件中的代码功能可以通过反射机制让其可以在目的文件中使用访问(通过Java反射机制,用Class 创建类对象)。从而让功能繁杂的单一文件变得可以解耦,让其可读性更强,日志也更容易分析。

反射写法

安卓中一般如下写法:

        Class clazz = Class.forName("***");
        //获取某个类的对象
        Object bst = clazz.newInstance();
        //获取有参有返回值的方法
        Method[] declaredMethods = clazz.getDeclaredMethods();
        Method m = clazz.getDeclaredMethod("getxxxx");//方法名字
        m.setAccessible(true);//关闭安全检查  **由于JDK的安全检查耗时较多.所以通过setAccessible(true)的方式关闭安全检查就可以达到提升反射速度的目的**
        Object query = m.invoke(bst); //返回值

反射的用处与解释

反射机制主要提供的功能

1.在运行时判断任意一个对象所属的类;

2.在运行时构造任意一个类的对象;

3.在运行时判断任意一个类所具有的成员变量和方法;

4.在运行时调用任意一个对象的方法;

java Reflection API简介
Class类:代表一个类,位于java.lang包下
Field类:代表类的成员变量(成员变量也称为类的属性)
Method类:代表类的方法
Constructor类:代表类的构造方法
Array类:提供了动态创建数组,以及访问数组的元素的静态方法

总结

感觉这一块在开发中很重要,虽然会变得复杂,但也使代码更加的“灵活”。后续我将会把一些难的知识点罗列出来,后续再深入探究。