11

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

有没有更好的方法来处理这个问题?有没有比 Eclipse 更好的自动化工具?有什么方法可以将重构应用于所有事件而不是一个一个地进行?还是您只是忽略警告?

4

5 回答 5

9

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

更新:来自Luke的精彩评论,我认为应该获得更多可见性: “泛型是在编译时捕获运行时错误的一种方法。除非这个遗留代码中有你认为与强制转换有关的错误,否则我会不理会它(如果它没有坏,不要修理它)”

于 2008-10-20T17:09:37.980 回答
3

据我所知,您正在尽可能高效地进行操作。这显然不是完美的,但你最终会完成的。

但是,我建议您分阶段进行;代码的某些部分可能会比​​其他部分受益更多,请关注这些部分。试图一次性完成所有操作会冒着将新错误引入代码的风险。我们有一个这样的地方,我们有一个包含上下文相关数据的集合,而泛型实际上不能为它工作。

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

于 2008-10-20T17:14:52.150 回答
3

Faced with a similar challenge, we opted to upgrade to Java 5 style generics only in the code that was edited for another reason. So if you have a bug to fix in DoItFast.java, update DoItFast.java to use Java 5 style generics. The areas of the code that are being edited and changed regularly will get updated quickly. After a few weeks or months of this behavior, you can reevaluate the condition of your code base.

If that doesn't get the job done fast enough for you, sometimes I'll use the slow time after lunch to just mindlessly cleanup a few classes and speed the process along.

于 2008-10-20T17:43:30.267 回答
1

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

于 2008-10-20T17:13:14.023 回答
1

I understand with IDEA you can select all your classes, popup the context menu and select Refactor | Generify. Job done. It's certainly a more enjoyable experience to work with generified code (IMO).

于 2008-10-20T18:38:04.523 回答