Java 将现有泛型转换为菱形语法
我比较喜欢Java7引入的泛型菱形语法——不是从节省时间的角度来看(毕竟大多数IDE都为您填充了这一部分),而是因为它使代码看起来更干净。由于这一点和其他原因(主要是因为我正在开发一个新的软件,Java 7中的一些新API将很有用),我很可能会将现有的代码库转换为使用/需要Java 7Java 将现有泛型转换为菱形语法,java,generics,java-7,Java,Generics,Java 7,我比较喜欢Java7引入的泛型菱形语法——不是从节省时间的角度来看(毕竟大多数IDE都为您填充了这一部分),而是因为它使代码看起来更干净。由于这一点和其他原因(主要是因为我正在开发一个新的软件,Java 7中的一些新API将很有用),我很可能会将现有的代码库转换为使用/需要Java 7 然而,有相当一部分已经编写了pre-diamond语法,我希望始终使用diamond语法。是否有IDE快捷方式(我正在使用Netbeans,但显然可以在任何免费IDE中打开项目来完成任务)或其他可以自动切换现有通
然而,有相当一部分已经编写了pre-diamond语法,我希望始终使用diamond语法。是否有IDE快捷方式(我正在使用Netbeans,但显然可以在任何免费IDE中打开项目来完成任务)或其他可以自动切换现有通用代码以使用菱形语法的方式?哦,是的,我已经在IntelliJ(免费社区版)上成功地完成了这项工作 菜单>分析>检查代码 在结果中,选择“Java语言级迁移辅助工具>显式类型可以替换为” 右键单击,运行“应用修复”“替换为”“”,您将得到钻石 anomymous类上有一个关于diamond的bug,因此某些代码在修复后可能无法编译。你必须把它们还原回去
// anonymous class, <> doesn't work.
new Factory<Pig>(){ ... }
// however IntelliJ may wrongly "fix" it to
new Factory<>(){ ... } // does not compile.
//匿名类不起作用。
新工厂(){…}
//然而IntelliJ可能会错误地将其“修复”到
新工厂(){…}//未编译。
Eclipse检测到冗余类型参数,并提供了一种快速修复方法来删除这些参数并创建菱形,请参阅如果您只想分析菱形而不是所有其他检查,请使用IntelliJ IDEA 12并转到:
分析>按名称运行检验…>在打开>选择下拉条目的提示中键入“explicit type can be Replace with”,然后按Enter键
检查运行后,您可以在屏幕底部的“检查”选项卡中选择应用修复
这比使用常规的“分析>检查代码…”运行每个代码检查要快得多。使用Eclipse,您可以使用正则表达式使用查找/替换 搜索:
new (\w+)<.+>
新建(\w+)
并替换为:
new $1<>
新的$1
这还将替换任何匿名内部类,因此可能会发生编译错误。这可以使用Netbeans内置功能“检查和转换”来完成
重构
->检查和转换
单次检验
:可以使用菱形
Inspect
Do重构
您还可以使用eclipse“清理”工具。(Source->Clean-Up,tab:不必要的代码,“删除冗余类型参数”)我不知道eclipse有这样的功能。但是用30行python脚本应该很容易做到这一点。。找到并替换?这很难奏效。你需要更多的逻辑才能正确工作,但是使用一些正则表达式和python脚本当然是可行的。对于不熟悉diamond语法的人来说,有些链接是可行的:而且@Voo我可以用自定义脚本来完成它,如果归结到这一点的话——我只是想知道是否有什么东西可以让我不再重复发明轮子。例如,IntelliJ常常隐藏着这样的特性;我认为有可能其他人已经遇到或想到了这种情况,并提供了这样一个内置的工具。谢谢,这正是我想要的!我不认为我有很多/任何匿名类以这种方式使用泛型,所以这不应该是一个问题。我用2019.1.1(最终版)成功地测试了这一点,并且您提到的错误没有发生在我的代码上。为了避免匿名内部类的问题,如果您可以假设开始
{
在同一行上,您可以通过使用“编辑>替换>包含文本<代码>新(\w+)([^{]+)(?!\{)$并替换为新1\2
在NetBeans中使用编辑>替换>包含文本<代码>新(\w+)并替换为新$1
,不要忘记在替换为字段(默认为文本)上方的下拉列表中选择匹配:正则表达式JDK迁移支持->可以使用菱形