gpt4 book ai didi

Java 反射和重构的痛苦

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:55:25 25 4
gpt4 key购买 nike

Java 反射提供了一种在运行时自省(introspection)对象的机制。没有第二个想法,这是一个很棒的功能,但它打破了所有重构约定!

即使在现代 IDE 中也没有简单的方法(除了 File Search)来知道引用了哪个属性以及引用的位置。这使得重构变得更加复杂(令人厌烦!)并且容易出错。

坦率地说,不仅仅是Reflection APIHibernate 映射文件 (hbm.xml)JSP 文件 都将属性引用为字符串,当您重构属性名称时,您必须在所有这些地方手动更改.

更糟糕的是,Hibernate 映射文件或 JSP 文件中的更改会导致运行时错误。

我很想知道其他程序员如何用 Java 处理这个问题。有一些工具吗?我使用 Eclipse/IBM RAD 作为主要开发平台。通常我们使用 constant 来定义属性并尽可能使用它,但并非总是如此。

我也很想知道其他语言是如何处理这个问题的!

最佳答案

Java 反射会导致许多与动态类型语言(如 Python 和 Ruby)相同的问题。事实上,考虑动态类型语言的一种方式是使用反射调用所有内容,并且这些语言只是为反射提供了一种漂亮、干净的语法。

是的,对于动态类型语言(或大量使用反射),重构很难。您无法获得出色的 Eclipse 重构功能。相反,grep 成为您的 friend 。

根据我的经验,您能做的最好的事情就是为自己建立一个良好的单元测试安全网。这样,如果您在重构过程中破坏了一些动态代码,至少您会在运行测试时快速捕捉到它。

如果您正在编写大量静态类型代码,并且没有良好的单元测试基础,您就会遇到大麻烦。如果您正在编写大量动态类型代码(包括具有大量反射的代码),那么如果没有良好的单元测试基础,您就没有成功的希望。

关于Java 反射和重构的痛苦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1027904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com