Java的反射API显然是一个非常强大的工具,但并不是特别面向对象。在哪些情况下适合(反之,不适合)使用反射?
最佳答案
在我看来...
适当(干净):
- 实例化动态加载实现的根,例如小程序。
- 使用
Proxy
创建代理或模拟实现(在编译时可能更好)。 - 实现允许不受限制地访问 Java 库的解释器。 (请注意,从安全角度来看,解释后的代码现在具有作为解释器的有效特权 - 可能有点危险。)
适当的技巧:
- 在绝对必要的地方绕过第三方代码中的 Java 语言访问控制。
- 实现“横切关注点”,例如持久性。
- 删除加载类导致启动较慢的静态依赖项。
不当:
- 一般规避 Java 语言访问控制(包括测试)。
- 任何依赖于特定反射调用类提供的 Java 语言访问权限的东西。
- 任何可以实现接口(interface)的地方。
通常反射比生成源代码容易得多,而生成源代码又比创建字节码容易得多。
关于java - 反射在 Java 中有哪些适当和不适当的用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3324551/