Java反射与重构的痛苦

lud0h:

Java Reflection提供了一种在运行时内省对象的机制。没什么好想的,这是一个了不起的功能,但是它破坏了所有的重构约定!

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

坦率地说,这不仅仅是Reflection API; Hibernate mapping files (hbm.xml)并且JSP files都将属性称为String,并且在重构属性名称时,必须在所有这些位置进行手动更改。

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

我有兴趣了解其他程序员如何用Java处理此问题。有一些工具吗?我使用Eclipse / IBM RAD作为主要开发平台。通常,我们使用a constant来定义属性,并在可能的情况下(但并非总是可能)使用它。

我也会对其他语言如何处理这一点感兴趣!

克林特·米勒(Clint Miller):

Java反射会导致许多与动态类型的语言(例如Python和Ruby)一样的问题。实际上,考虑动态类型语言的一种方法是使用反射来调用所有内容,而这些语言只是为反射提供了一种简洁的语法。

是的,对于动态类型的语言(或大量使用反射),重构很难。您没有很好的Eclipse重构功能。而是grep成为您的朋友。

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

如果您要处理大量的静态类型代码,那么如果没有良好的单元测试基础,就会遇到很大的麻烦。如果您要执行许多动态类型化的代码(包括具有大量反射的代码),那么没有良好的单元测试基础就不会有成功的希望。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章