代码之家  ›  专栏  ›  技术社区  ›  morsch

遗留代码中的泛型

  •  11
  • morsch  · 技术社区  · 16 年前

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

    有没有更好的方法来处理这个问题?有比Eclipse更好的自动化工具吗?任何将重构应用于 所有 发生而不是一个接一个地做?还是你只是无视警告?

    5 回复  |  直到 15 年前
        1
  •  9
  •   Community CDub    8 年前

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

    更新: 伟大的评论来自 Luke 我认为应该得到更多的关注: “泛型是一种在编译时捕获运行时错误的方法。除非这个遗留代码中有你认为与强制转换有关的错误,否则我会让它保持原样(如果它没有损坏,就不要修复它)”

        2
  •  3
  •   Chris R    16 年前

    据我所知,你正在尽可能高效地处理这件事。it is 的常用口语形式 显然不是完美的,但你最终会完成的。

    然而,我建议你分阶段进行;可能有部分 那些比其他代码受益更多的代码,请专注于这些代码。试图 一次性完成所有操作可能会给代码引入新的错误。我们 有一个这样的地方,我们有一个包含上下文相关的集合 数据和泛型实际上不适用于它。

    基本上,做你正在做的事情,但要分阶段做,作为其他工作的一部分, 而不是试图在一次投掷中解决所有问题。

        3
  •  3
  •   Alex B    16 年前

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

    如果这对你来说还不够快,有时我会利用午饭后的缓慢时间,无意识地清理几节课,加快进度。

        4
  •  1
  •   Kip    16 年前

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

        5
  •  1
  •   Tom Hawtin - tackline    16 年前

    我了解到,使用IDEA,您可以选择所有类,弹出上下文菜单,然后选择重构|泛化。工作完成。使用通用代码(IMO)肯定是一种更愉快的体验。