sla*_*lau 3 java migration refactoring
我正在审查代码库(~20K LOC)并试图确定如何将它从1.4.2迁移到5.显然,这不是一个隔夜项目,我收到的建议是编写新代码反对Java 5并以零碎的方式迁移旧代码.此外,我不是Java 5新功能的专家(即我知道它们,但从未编写任何用于生产用途).
我的问题:
Java 5的哪些功能通常用于生产代码?(即泛型,自动装箱等)是否有特征要避免/不被认为是最佳做法?
我可以使用哪些最好的重构策略来迁移这个大小的代码库?(即仅在编辑类时一次更改一个类,等等.)目标 - 降低代码库的风险.限制 - 进行重构的资源.
任何建议表示赞赏 - 提前谢谢.
更新 - 一年太晚了,但迟到总比没有好?=)
感谢您的所有评论 - 很多很棒的观点.在软件开发人员的生活中,总会有你努力完成的项目,但由于某些更"紧急"的事情,我们永远不会到处走.
关于Java 5的使用(当时),它是客户端生产环境中所需要的东西,所以这就是我们不使用Java 6的原因.
我发现,对于集合,枚举和基元拆箱的更强类型是我倾向于最常用的功能,包括旧代码和新代码.重构非常简单,但代码理解得到了显着改善,标准变得更容易实施.我最麻烦的是仿制药; 我认为这是一个我仍然没有机会完全掌握和欣赏的概念,因此我很难找到以前适用仿制药的案例.
再次感谢所有为此帖做出贡献的人,并为后期跟进道歉.
Java 5几乎完全向后兼容Java 4.通常,迁移时必须进行的唯一更改是重命名enumJava 4代码中new 关键字的任何用法.
此处列出了潜在兼容性问题的完整列表:
http://java.sun.com/j2se/1.5.0/compatibility.html
我在实践中遇到的唯一另一个问题与JAXP实现的变化有关.在我们的例子中,它只是意味着从类路径中删除xerces.jar.
就重构而言,我认为迁移集合类以使用新的强类型泛型版本并删除不必要的转换是个好主意.但正如另一张海报指出的那样,如果你在垂直切片中工作,改用通用集合往往效果最好.否则,您最终必须向代码添加强制转换,以使泛型类型与非泛型类型兼容.
我在迁移代码时喜欢使用的另一个功能是@Override注释.当您重构代码时,它有助于捕获继承问题.
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Override.html
如果您的代码使用线程,那么新的并发库非常有用.例如,您可以用a替换自己开发的线程池ThreadPoolExecutor.
http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html#concurrency
我肯定会采取在正常维护期间更改代码时更新代码的方法.除了兼容性问题之外,我不认为使用新的Java 5功能有令人信服的理由,除非您因其他原因而已经更改了代码.
| 归档时间: |
|
| 查看次数: |
1977 次 |
| 最近记录: |