Java反思的优点和缺点?

时间:2017-01-26 08:18:06

标签: java reflection

我今天正在查看一些代码,我遇到了一段代码,使用反射来获取通用对象,并根据类型对其执行不同的操作。我之前从未见过这样的东西,我想知道在java中使用反射的优缺点是什么?

2 个答案:

答案 0 :(得分:4)

Java中没有反射的优点或缺点。这是一个你应该在特定情况下使用的工具。例如:

  • 当您创建需要使用代码进行运行时操作的库时。
  • 当你编译jar时没有源代码,而jar的作者犯了一个错误,并且没有公开适当的API。

所以基本上甚至没有问题,你应该使用或不使用反射,这是一个情况问题。你应该使用反射,如果可以在不使用99.99%的情况下完成工作。

<强> UPD

  

你不能用它来做一切吗?就像你是一个非常大的混蛋一样,你可以用它来调用你调用的每一种方法,那么是什么阻止你这样做呢?

主要是缓慢,无法维护的代码,丢失编译时代码检查,破坏封装。

答案 1 :(得分:2)

  

使用反射来获取通用对象并执行不同的操作   它基于类型

一般来说,出于性能,清晰度和稳健性的原因,这通常是一个坏主意。

它抛弃了静态类型系统的优点;如果传入反射代码未处理的类型,则会出现运行时错误而不是编译时错误。如果其中一个类改变了实现(例如重命名方法),那么在编译时也不会检测到它。

如果这些不同的类型有共同之处,那么通常使用多态来处理这种情况会更好:将通用性抽象为接口或抽象类;然后,每个子类可以实现它所需的特定行为,而无需其他代码使用反射进入内部。

如果这些不同类型的有任何共同之处,那么为什么要一起处理它们呢?