反思:有效,真棒,必要的用途

可能重复:
什么是反思,为什么它有用?

所以我已经阅读了Java网站上的Reflection教程,我认为我通常理解它允许一个类可以检查自己,访问属性,方法等等。但是,如果可以的话,它是如何与可变或不可变的代码? 类可以使用反射来改变自己的代码吗? 如果不是,你遇到/创建的反射最令人敬畏的用法是什么?

谢谢!


不,反射并不能直接让类改变它的代码。 然而,你可以用java.lang.reflect.Proxy做一些很棒的事情 - 例如编写实现任何JavaBean风格接口(即设置和获取方法)的通用代码,甚至通过让所有方法返回来实现任何接口的代码默认值 - 甚至可能是递归的,即返回接口类型的方法返回一个对象,其行为方式相同。

Mock对象库使用该工具,Groovy语言可能最突出地实现了支持鸭子打字和猴子修补的完全动态语言。


Java反射不允许您像动态语言(如Ruby)那样动态更改程序的代码。

Java反射允许您查看有关某个类的方法和属性的元数据。 它还允许您调用这些方法或更改属性值,而无需预先知道可用的方法和属性。

要在Java中运行时修改程序代码,请查看面向方面的编程。

我见过的最令人敬畏的用法是在JRuby绑定中,使Java类可以动态提供为Ruby代码。 我自己也使用了反射来允许我查找来自使用static int Constants而不是枚举的第三方库的错误代码。

链接地址: http://www.djcxy.com/p/47619.html

上一篇: Reflection: Effective, Awesome, Necessary uses

下一篇: Reflection api in Java