Java中反射的适当和不恰当用途是什么?

Fea*_*nor 8 java reflection

Java的反射API显然是一个非常强大的工具,但不是特别面向对象.在哪些情况下使用反射是合适的(反过来说是不合适的)?

Tom*_*ine 4

在我看来...

适当(干净):

  • 实例化动态加载实现的根,例如小程序。
  • 使用Proxy创建代理或模拟实现(在编译时可能更好)。
  • 实现允许不受限制地访问 Java 库的解释器。(请注意,从安全角度来看,解释后的代码现在具有解释器的有效权限 - 可能有点危险。)

适当的技巧:

  • 在绝对必要的情况下规避第三方代码中的 Java 语言访问控制。
  • 实施“跨领域关注”,例如持久性。
  • 删除加载类导致启动速度变慢的静态依赖项。

不当:

  • 一般规避 Java 语言访问控制(包括测试)。
  • 任何事情都依赖于特定反射调用类所赋予的 Java 语言访问权限。
  • 任何可以实现接口的地方。

一般来说,反射比生成源容易得多,而生成源又比创建字节码容易得多。