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

Mic*_*rry 30 java generics java-7

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

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

irr*_*ble 42

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

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

在结果中,选择"Java语言级别迁移辅助工具>明确性类型可以替换为<>"

右键单击,运行"应用修复'替换为<>'"然后你就得到了钻石.

在anomymous类上有一个关于菱形的错误,所以一些代码可能无法在修复后编译.那时你必须还原它们.

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


Lin*_*ond 8

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

分析>按名称运行检查...>在打开的提示中键入"显式类型可以替换为<>">选择下拉条目并按Enter键

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

这比使用常规的"Analyze> Inspect Code ..."运行每个代码检查要快得多.


bru*_*osg 7

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

搜索:

new (\w+)<.+>
Run Code Online (Sandbox Code Playgroud)

并替换为:

new $1<>
Run Code Online (Sandbox Code Playgroud)

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

  • 为了避免匿名内部类的问题,如果你可以假设开头`{`在同一行,你可以放弃负面预测:`new(\ w +)<.+>([^ {] +)(?!\ {)$`并替换为`new 1 <>\2` (2认同)