Android反射的简单应用之BottomNavigationView

反射

反射(Reflection)在java和android开发过程中都非常有用,但是在android中的使用往往会影响app的性能,因此使用反射时要在适当的情况下使用。

什么时候使用呢?

反射耗时的多少与被反射类的大小有关系,它本质上是对类的成员列表进行遍历。如果这个类的成员越多,遍历的时间越长,整个反射的时间也就越多,如果类的成员较少,影响也是较小的。例如在以Activity作为测试对象,Activity是个大类,因此反射耗时比较正常。反射是把双刃剑,在适当的情况下使用非常利于程序的架构,如果使用不当会造成性能损耗。

如何使用呢?

我们不妨先看看这篇文章—公共技术点之 Java 反射 Reflection,相信你可以使用里面的方法来实现自己所需的功能。
这里就让我们来总结下反射的一些方法:

  • 获取class对象:
    正常来获取class时我们都是直接用 object.class 或者 通过该类的对象(Object o = new Object(),)来获取class( o.getclass()),下面则是通过class所在的包名来获取对象。
// 加载指定的 Class 对象,参数为要加载的类的完整路径
public static Class<?> forName (String className)

// 加载指定的 Class 对象,参数 1 为要加载的类的完整路径,例如"com.loften.sample.test";
// 参数 2 为是否要初始化该 Class 对象,参数 3 为指定加载该类的 ClassLoader.
public static Class<?> forName (String className, boolean shouldInitialize, ClassLoader classLoader)

//在调用 Class.forName()方法时,没有在编译路径下(classpath)找到对应的类,那么将会抛出 ClassNotFoundException
  • 获取构造函数:
// 获取一个公有的构造函数,参数为可变参数,如果构造函数有参数,那么需要将参数的类型传递给 getConstructor 方法
public Constructor<T> getConstructor (Class...<?> parameterTypes)
// 获取目标类所有的公有构造函数
public Constructor[]<?> getConstructors ()

注意,当你通过反射获取到 Constructor、Method、Field 后,在反射调用之前将此对象的 accessible 标志设置为 true,以此来提升反射速度。值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。

Constructor<?> constructor = clz.getConstructor(String.class);
// 设置 Constructor 的 Accessible
constructor.setAccessible(true);

// 设置 Methohd 的 Accessible
Method learnMethod = Student.class.getMethod
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值