反射作为java语言非常重要的特性之一,在开发的过程中可以为我们提供极大的便利。在J2EE中,java反射得到了大量的应用,尤其是在一些主流框架中,如Spring中反射就发挥了极大的作用。那将java作为开发语言的Android,我们能否利用java反射这一重要特性,帮助我们更加灵活、高效的进行开发呢?答案是肯定的。
我们先来了解一下反射(Reflection)到底是什么?
官方一点的解释:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
个人认为反射的精髓在于两个字—动态。我们在实际编程解决问题的时候,往往会遇到这种情况,就是程序运行的时候应该去实例化哪个类,只有在运行时才知道,因此不能够在编译阶段就做出决定。Java反射就可以帮助我们在运行时决定应该实例化哪个类。因此,java反射的强大就在于它能够在程序运行时实例化对象,这是同我们平时用new实例化对象最根本的区别。
说了这么多,对于反射可能还是会感到有些模糊,一般java初学者都会对反射感到难于理解。遇到这种情况,最好的方法就是在实际项目中去利用它,在实战中理解反射的强大,感受它带给我们的便利。说实话笔者在写这篇博客之前对于反射的理解也是非常表面的,直到最近review之前写的Android项目,发现当年的我还是太年轻,囧……写的代码质量实在是太低了,项目中充斥着大量的重复代码,原因就是当时不会用反射,导致大量代码冗余。但是利用反射后,我竟发现代码量少了1/3, 而且代码整体也比原先的整洁、优雅了很多~
先来简单了解一下我这个Android项目的business吧。这个app是一款为服务于广大高考考生的一个错题本。用户可以用他利用摄像头对错题进行捕获,用户可以自定义每个科目的分类,按照分类