java - 反射在 Java 中有哪些适当和不适当的用途?

标签 java reflection

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

最佳答案

在我看来...

适当(干净):

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

适当的技巧:

  • 在绝对必要的地方绕过第三方代码中的 Java 语言访问控制。
  • 实现“横切关注点”,例如持久性。
  • 删除加载类导致启动较慢的静态依赖项。

不当:

  • 一般规避 Java 语言访问控制(包括测试)。
  • 任何依赖于特定反射调用类提供的 Java 语言访问权限的东西。
  • 任何可以实现接口(interface)的地方。

通常反射比生成源代码容易得多,而生成源代码又比创建字节码容易得多。

关于java - 反射在 Java 中有哪些适当和不适当的用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3324551/

相关文章:

java - 键盘上的 Control 键 + M 可触发 SWT 中树项目的双击功能

java - ArrayIndexOutOfBoundsException 中指定的 "length"是什么?

java - 从 jsp 页面运行 servlet

具有访客模式反射的 Java 泛型

Java:是否可以在运行时向 Activity 对象实例添加/附加代理?

java - 字段的 get(Object obj) 不适用于实例变量

java - 将 Mockito 返回设置为除特定值之外的任意整数

java - 与 "&&"和 "||"混淆

c# - 如何使用类型调用 default(T)?

c# - 如何隐式转换反射方法调用