Java / C#中反射的用途是什么?

这个问题在这里已经有了答案:

  • 什么是反思,为什么它有用? 20个答案

  • 简而言之:因为有时在编译时你不知道“Foo”或“hello”部分。

    绝大多数时候你都知道这一点,所以不值得使用反思。 但是,有时候,你不会 - 在那个时候,反射就是你可以转向的。

    例如,协议缓冲区允许您生成代码,其中包含用于读取和写入消息的完整静态类型代码,或者生成足够的代码以便其余代码可以通过反射完成:在反射情况下,加载/保存代码必须通过反射来获取和设置属性 - 它知道由于消息描述符而涉及的属性的名称。 这太慢了很多,但会导致代码的生成量大大减少。

    另一个例子是依赖注入,其中用于依赖关系的类型的名称通常在配置文件中提供:然后DI框架必须使用反射来构建所涉及的所有组件,沿途查找构造函数和/或属性。


    只要你(=你的方法/你的类)在编译时不知道类型应该实例化或者它应该调用的方法,就会使用它。

    此外,许多框架使用反射来分析和使用您的对象。 例如:

  • hibernate / nhibernate(和任何对象关系映射器)使用反射来检查类的所有属性,以便在执行数据库操作时能够更新它们或使用它们
  • 您可能希望将其配置为应用程序默认执行的用户定义类的哪个方法。 配置的值是String ,并且您可以获取目标类,获取具有配置名称的方法并调用它,而无需在编译时知道它。
  • 解析注释是通过反射完成的

  • 典型的用法是插件机制,它支持在编译时未知的类(通常是接口的实现)。

    链接地址: http://www.djcxy.com/p/47609.html

    上一篇: What is the use of reflection in Java/C# etc

    下一篇: Why Spring's ReflectionUtils marked as "Only intended for internal use"?