Java 反思:有效、可怕、必要的用途

Java 反思:有效、可怕、必要的用途,java,reflection,Java,Reflection,可能的重复项: 因此,我已经阅读了Java网站上的反射教程,我想我一般都理解它允许类检查自己,访问属性、方法等。然而,如果有的话,这与可变或不可变代码有什么关系?类可以使用反射之类的东西更改自己的代码吗?如果不是,你遇到/创造的反射最棒的用途是什么 谢谢 否,反射不会直接使类更改其代码。但是,您可以使用一些很棒的东西—例如,编写实现任何JavaBean样式接口(即set和get方法)的通用代码,或者甚至通过让所有方法返回默认值来实现任何接口的代码—甚至可能是递归的,即,返回接口类型的方法返回的

可能的重复项:

因此,我已经阅读了Java网站上的反射教程,我想我一般都理解它允许类检查自己,访问属性、方法等。然而,如果有的话,这与可变或不可变代码有什么关系?类可以使用反射之类的东西更改自己的代码吗?如果不是,你遇到/创造的反射最棒的用途是什么


谢谢

否,反射不会直接使类更改其代码。但是,您可以使用一些很棒的东西—例如,编写实现任何JavaBean样式接口(即set和get方法)的通用代码,或者甚至通过让所有方法返回默认值来实现任何接口的代码—甚至可能是递归的,即,返回接口类型的方法返回的对象的行为方式相同


此功能由使用,并且可能最重要的是由用于实现支持duck类型和monkey补丁的完全动态语言。

Java反射不允许您像在ruby等动态语言中那样动态更改程序代码

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

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


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

Hmm,自动链接同一个问题五次似乎不是很有用。我们应该在它关闭后编辑它吗?任何我说五次的话我都是真的,真的是真的。任何我说五次的话我都是真的,真的,真的,真的,真的,真的是真的。PS:最好的用法是不要使用它。反射会增加很多问题,但当需要反射时,通常没有其他(非反射)解决方案。当你需要它时,你会完全明白它的用途:)啊,我在看第一个被标记为重复的问题。。。