反思:有效,令人敬畏,必要的用途

时间:2009-05-20 12:10:41

标签: java reflection

  

可能重复:
  What is reflection, and why is it useful?

所以我在Java的网站上阅读了反思教程,我想我一般都明白它允许一个类检查自己,有权访问属性,方法等。但是,如果有的话,这是如何关联的可变或不可变的代码?类可以使用像反射这样的东西来改变自己的代码吗如果没有,你遇到/创造的反射最令人敬畏的用途是什么?

谢谢!

2 个答案:

答案 0 :(得分:3)

不,反射不能直接使类改变其代码。但是,您可以使用java.lang.reflect.Proxy做一些很棒的事情 - 例如编写实现任何JavaBean样式接口的通用代码(即set和get方法),甚至通过让所有方法返回默认值来实现任何接口的代码 - 甚至可能是递归的,即返回接口的方法type返回一个行为方式相同的对象。

这个工具由Mock object libraries使用,Groovy language可能最突出地实现了支持鸭子打字和猴子修补的完全动态语言。

答案 1 :(得分:1)

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

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

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

我见过的最棒的用法是在JRuby绑定中,使Java类动态地作为ruby代码使用。我自己也使用了反射,允许我从使用静态int常量而不是枚举的第三方库中查找错误代码。