【问题标题】:Reflection: Effective, Awesome, Necessary uses [duplicate]反思:有效,真棒,必要的用途[重复]
【发布时间】:2010-10-27 14:48:43
【问题描述】:

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

所以我已经阅读了 Java 网站上的反射教程,并且我想我通常理解它允许一个类检查自身,可以访问属性、方法等。但是,如果有的话,这有什么关系可变或不可变代码?类可以使用反射之类的方法更改自己的代码吗?如果没有,您遇到/创造的反射最棒的用途是什么?

谢谢!

【问题讨论】:

  • 嗯,自动链接同一个问题五次似乎不是很有用。我们应该在它关闭后对其进行编辑吗?
  • 任何事情我都说五遍,我真的,真的。
  • 任何事情说五遍我真的,真的,真的,真的,真的很刻薄。
  • PS:最好的就是不要用。反射增加了很多问题,但是当需要它时,通常没有其他(非反射)解决方案。当你需要它时,你会明白它的用途:)
  • 啊,我正在查看第一个被标记为重复的问题...

标签: java reflection


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    Mock object libraries 使用此工具,Groovy language 可能最突出地使用该工具来实现支持鸭子类型和猴子补丁的完全动态语言。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-12
      • 2011-11-09
      • 2015-05-06
      • 1970-01-01
      • 2013-12-14
      • 2016-08-13
      • 2018-04-05
      • 2021-01-25
      相关资源
      最近更新 更多