使用 Java 反射是不好的做法吗?

Is using Java Reflection Bad Practice?

我正在为客户构建一个应用程序,我需要能够通过字符串引用字段值,即用户使用字符串来定义他们想要更改的字段的价值,这是抽象框架的一部分,所以从技术上讲,我不知道他们希望更改的字段的名称。当然,我可以使用散列映射来做到这一点,但我正在考虑使用 java 反射,因为这允许字段保留为对象的字段,而不是将值编码到散列映射中。我在自己的个人工作中使用了反射,但我想知道使用 Java 反射是否实际上是不好的做法,我应该坚持 hashmap 方法。

(对于解决所描述的设计问题的任何其他建议也表示赞赏)

谢谢

这个问题本身是基于意见的,尽管我相信大多数人会同意你不能只说 "reflection is bad"。有时它是唯一的方法,这就是为什么很多库使用反射的原因。有时这不是唯一的方法,但解决方法会更糟。有时这不是唯一的方法,也不是最简单的方法,但开发人员对反思的力量惊叹不已,无法直接思考。

除了最后一个,还有很多正当理由将反射视为一种解决方案。

个人反思让我很伤心,根据我的经验,几乎总是更好的方法。在您描述的问题中,基于字符串设置变量我会考虑使用您的哈希图想法,该想法将通过字符串键引用变量,这看起来正是您所描述的。如果您需要引用不存在的值的能力,您还可以包括工厂方法以在不存在键时创建变量,然后添加到映射中,如果您正在包装对象,那么它们将通过引用传递以避免您遇到的问题describe 但这取决于实现(例如,如果您引用基元,则使用 Integer class 等进行自动装箱)这将允许更严格和定义明确的实现,而不是到处反映值。为 anti-reflection 的偏见道歉!希望这有帮助。