遗留代码中的泛型

时间:2008-10-20 17:03:04

标签: java generics migration legacy-code

我们有相当多的代码只是跳转到Java 5.我们一直在那些针对Java 5版本发布的组件中使用泛型,但剩下的代码当然是充满原始类型。我已经设置了编译器为原始类型生成错误并开始手动清除它们,但是按照目前的速度,它需要非常很长时间来完成它(有关于 2500 错误)。这就是Eclipse有用的Infer Generic Type快速修复,它总能消除错误,但通常会生成需要进一步工作的代码。

有没有更好的方法来解决这个问题?有没有比Eclipse更好的自动化工具?有没有办法将重构应用于所有出现而不是一个一个地进行重构?或者你只是忽略警告?

5 个答案:

答案 0 :(得分:9)

我建议忽略这些警告。否则,您将花费大量时间更新遗留代码,而不对其功能进行任何改进。

更新:来自Luke的好评我认为应该可以获得更多可见性: “泛型是一种在编译时捕获运行时错误的方法。除非这些遗留代码中存在你认为与编译有关的错误,否则我会不管它(如果没有破坏,请不要修复它) )“

答案 1 :(得分:3)

据我所知,你会尽可能高效地进行。它的 显然不完美,但你最终会完成。

我建议您分阶段进行;有可能的部分 比其他人更有益于此的代码,专注于那些。尝试去 在一次扫描中完成所有操作会冒着向代码中引入新错误的风险。我们 有一个这样的地方,我们有一个集合,依赖于上下文 数据和泛型实际上不适合它。

基本上,做你正在做的事情,但作为其他工作的一部分分阶段做, 而不是试图一次性修复它。

答案 2 :(得分:3)

面对类似的挑战,我们选择仅在出于其他原因编辑的代码中升级到Java 5样式泛型。因此,如果您要在DoItFast.java中修复错误,请更新DoItFast.java以使用Java 5样式泛型。正在编辑和定期更改的代码区域将快速更新。经过几周或几个月的这种行为后,您可以重新评估代码库的状况。

如果这对你来说没有足够快地完成工作,有时我会在午餐后慢慢使用,只是盲目地清理几个课程并加快这个过程。

答案 3 :(得分:1)

我认为没有必要更新所有旧代码。也许你可以以某种方式识别旧代码的哪些部分经常使用,并且只更新那些使用泛型类型?或者也许您只能在从公共函数返回原始类型时担心?很多这些情况可能只是私有/局部变量,它们已经写好了没有泛型类型,并且可能工作得很好,所以重写它们可能不值得。

答案 4 :(得分:1)

我理解IDEA你可以选择所有的类,弹出上下文菜单并选择Refactor |泛型化。任务完成。使用通用代码(IMO)确实是一种更愉快的体验。

相关问题