将现有泛型转换为菱形语法

时间:2011-07-22 21:58:10

标签: java generics java-7

我更喜欢Java 7引入的泛型的菱形语法 - 从节省时间的角度来看(毕竟大多数IDE都为你填补了这一点),只是因为它使代码看起来更清晰。由于这个和其他原因(主要是我正在开发一个新的软件和Java 7中的一些新API将是有用的),我很可能会切换现有的代码库来使用/需要Java 7。

然而,有一个公平的块已经编写了钻石前语法,我想始终如一地使用钻石语法。是否有IDE快捷方式(我使用Netbeans但显然可以在任何免费的IDE中打开项目来完成任务)或其他可以自动切换现有通用代码以使用菱形语法的东西?

6 个答案:

答案 0 :(得分:41)

哦,是的,我已经在IntelliJ(免费社区版)上成功完成了这项工作。

菜单>分析>检查代码......

在结果中,选择“Java语言级别迁移辅助工具> Explicity类型可以替换为<>”

右键单击,运行“应用修复'替换为<>'”并且您获得了钻石。

在anomymous类上有一个关于菱形的错误,所以有些代码可能无法在修复后编译。你将不得不将它们还原回来。

// anonymous class, <> doesn't work.
new Factory<Pig>(){ ... }  
// however IntelliJ may wrongly "fix" it to
new Factory<>(){ ... }   // does not compile.

答案 1 :(得分:8)

如果您只是想分析钻石而不是所有其他检查,请使用IntelliJ IDEA 12并转到:

分析&gt;按名称运行检查...&gt;类型“显式类型可以替换为&lt;&gt;”进入打开的提示&gt;选择下拉条目并按Enter键

检查运行后,您可以选择在屏幕底部的“检查”选项卡中应用此修复。

这比使用常规'Analyze&gt;运行每个代码检查更快检查代码......'

答案 2 :(得分:7)

使用Eclipse,您可以使用正则表达式来查找/替换。

搜索:

new (\w+)<.+>

并替换为:

new $1<>

这也将替换任何匿名内部类,因此可能会发生编译错误。

答案 3 :(得分:4)

Eclipse检测冗余类型参数并提供快速修复以删除它们并创建钻石,请参阅http://thecoderlounge.blogspot.com/2011/07/java-7-support-in-eclipse-jdt-beta-part_22.html

答案 4 :(得分:1)

这可以使用Netbeans内置功能“Inspect and Transform”来完成。

  1. 打开Refactor - &gt; Inspect and Transform
  2. 使用Single InspectionCan Use Diamond
  3. 点击Inspect
  4. 点击Do Refactoring

答案 5 :(得分:0)

您还可以使用日食的“清理”工具。 (源->清理,选项卡:不必要的代码,“删除冗余类型参数”)