Reflection 除了逆向工程,反射真的有用吗?

Reflection 除了逆向工程,反射真的有用吗?,reflection,Reflection,Java和PHP等语言支持反射,这允许对象提供关于自身的元数据。是否存在任何合法的用例,您需要能够做一些事情,比如询问对象在逆向工程领域之外有什么方法?这些用例中有任何一个是今天实际实现的吗?用于调试、序列化、日志记录、测试的框架…反射在Java中被框架广泛使用,这些框架在运行时被用来动态操作其他代码。如果没有反射,代码之间的所有链接都必须在编译时完成(静态) 因此,例如,任何有用的插件框架(OSGi、JSPF、JPF)都会利用反射。任何注入框架(Spring、Guice等)都利用反射 任何时候

Java和PHP等语言支持反射,这允许对象提供关于自身的元数据。是否存在任何合法的用例,您需要能够做一些事情,比如询问对象在逆向工程领域之外有什么方法?这些用例中有任何一个是今天实际实现的吗?

用于调试、序列化、日志记录、测试的框架…

反射在Java中被框架广泛使用,这些框架在运行时被用来动态操作其他代码。如果没有反射,代码之间的所有链接都必须在编译时完成(静态)

因此,例如,任何有用的插件框架(OSGi、JSPF、JPF)都会利用反射。任何注入框架(Spring、Guice等)都利用反射

任何时候,如果您想编写一段与另一段代码交互的代码,而不需要在编译时提供该段代码,反射就是Java的前进方向


但是,这最好留给框架,应该封装。

像Spring或Hibernate这样的框架广泛使用反射来检查类并查看注释。

当然有很好的用例。例如,获取开发人员提供的元数据。JavaAPI越来越多地使用注释来提供有关方法/字段/类及其使用的信息。像输入验证,绑定到数据表示。。。您可以在编译时使用这些来生成元数据描述符并使用它们,但在运行时这样做需要反射。即使使用元数据描述符,它们最终也会包含需要通过反射访问的类、方法和字段名等内容

另一个用例:动态语言。以鲁比为例。。。它允许您在尝试调用方法之前预先检查对象是否会响应方法名。这样的事情需要反思


或者,当必须从外部编译代码中提供类或方法名称时,比如选择某个API的实现时,情况又如何呢。那只是一段文字。查找它所解决的问题可以归结为思考。

可能重复的……这只是自动列出的“相关”问题中的第一个。我很难相信,在你撰写这个问题时,没有自动向你推荐任何有用的东西。@Zachratner注释是放在代码中各种元素之前的一点元数据,比如类声明,方法等。注释本身不做任何事情,但可以由工具用于各种目的,如生成额外的人工制品或检查约束。一方面,这是元信息,您不想在自己的类中硬编码行为。另一方面,在单独的文件中提供这样的信息会使它远离它所属的地方:代码。输入注释,以缩小差距。另一种方法是使用GCLIB和动态代码生成