【发布时间】:2011-11-04 23:46:26
【问题描述】:
Java 和 PHP 等语言支持反射,它允许对象提供有关自身的元数据。是否有任何合法的用例,您需要能够做一些事情,例如询问对象它在逆向工程领域之外有哪些方法?这些用例中的任何一个在今天实际实施了吗?
【问题讨论】:
-
...这只是 SO 自动列出的“相关”问题中的第一个。我很难相信在您撰写此问题时,系统会自动向您推荐没有任何有用的。
标签: reflection
Java 和 PHP 等语言支持反射,它允许对象提供有关自身的元数据。是否有任何合法的用例,您需要能够做一些事情,例如询问对象它在逆向工程领域之外有哪些方法?这些用例中的任何一个在今天实际实施了吗?
【问题讨论】:
标签: reflection
反射在 Java 中被广泛使用,框架在运行时利用这些框架动态地操作其他代码。如果没有反射,代码之间的所有链接都必须在编译时完成(静态)。
因此,例如,任何有用的插件框架(OSGi、JSPF、JPF)都利用了反射。任何注入框架(Spring、Guice 等)都利用反射。
任何时候您想编写一段代码来与另一段代码交互在编译时该段代码不可用,反射是 Java 的前进方向。
但是,这最好留给框架,应该被封装。
【讨论】:
当然有很好的用例。例如,获取开发者提供的元数据。 Java API 越来越多地使用注释来提供有关方法/字段/类及其使用的信息。就像输入验证,绑定到数据表示......您可以在编译时使用这些来生成元数据描述符并使用它们,但是在运行时执行它需要反射。即使您使用元数据描述符,它们最终也会包含需要通过反射访问的类、方法和字段名称等内容。
另一个用例:动态语言。以 Ruby 为例...它允许您在尝试调用该方法之前预先检查对象是否会响应方法名称。这样的事情需要反思。
或者什么时候必须从外部编译代码提供类或方法名称,例如选择某个 API 的实现时。这只是一小段文字。查找它所解决的问题归结为反思。
【讨论】:
Spring 或 Hibernate 等框架广泛使用反射来检查类并查看注释。
【讨论】:
用于调试、序列化、日志记录、测试的框架...
【讨论】: