今天心血来潮想了解一下Java反射机制的历史。想知道JDK的设计者们,是在怎么样的场景下,从语言的层面加入了这一特性。而它又是怎么样一步步演化成今天的样子的。
一个事物的初衷和它最后的用途,可能相去甚远。就好像矩阵被海森堡用于量子力学,但是最初被数学家发明出来的时候,其实是为了解方程组。
一开始我以为这类文章应该一搜一大把,无奈不管谷歌百度,大部分都是以“现代”视角来写的。只挖到一篇题为《Using Java Reflection》[1]的文章,显示的时间戳是“January 1998”,年份够陈(反射是1997年发布的JDK 1.1中引入的 [2]),那就从它入手吧。
文章中提到:
One tangible use of reflection is in JavaBeans, where software components can be manipulated visually via a builder tool. The tool uses reflection to obtain the properties of Java components (classes) as they are dynamically loaded.
大意是,工具可以通过反射来获取Java组件(类)的属性。
说实话对于没用过JavaBeans的人来说,光看这样的解释还是不能理解。
再翻翻它的老底吧。
参考Wikipedia上的定义[3],又看到了这样一句话:
It is a reusable software component written in Java that can be manipulated visually in an application builder tool.
同样是“be manipulated visually”,跟之前的文章简直如出一辙。在最后一节中有一个外链教程。终于在《A Button is a Bean》[4]中,我们看到了:
标题很直白:Button是一个Bean。同时,在构建工具(build tool)中,按钮的属性又可以通过反射可以取得,比如图中所示的文本、图标。
至此,应该算是把引入反射的原因理清楚了:为了能可视化的把一个类的属性展示给编写Bean的用户。
网友评论