【问题标题】:Convert existing generics to diamond syntax将现有泛型转换为菱形语法
【发布时间】:2011-07-22 21:58:09
【问题描述】:

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

但是,已经编写了相当多的 pre-diamond 语法,我想始终使用 diamond 语法。是否有 IDE 快捷方式(我使用的是 Netbeans,但显然可以在任何免费 IDE 中打开项目来完成任务)或其他可以自动切换现有通用代码以使用菱形语法的东西?

【问题讨论】:

  • 并不是说我知道 Eclipse 的这一点。但这应该很容易使用 30 行的 python 脚本来实现。
  • 嗯,不是最优的,但是 .. 查找和替换?
  • 那几乎行不通。您需要更多逻辑才能使其正常工作,但肯定可以使用一些正则表达式和 python 脚本
  • @Voo 如果归根结底,我可以使用自定义脚本执行此操作 - 我只是想知道是否有任何东西可以让我重新发明轮子。例如,IntelliJ 经常隐藏这样的特性;我认为可能其他人已经遇到或想到了这种情况并提供了这样的内置工具。

标签: java generics java-7


【解决方案1】:

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

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

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

右击,运行“Apply Fix 'Replace with '”,你就得到了钻石。

在异常类中存在关于 diamond 的错误,因此修复后某些代码可能无法编译。届时您必须将它们还原。

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

【讨论】:

  • 谢谢,这正是我所追求的!我不认为我有很多/任何匿名类以这种方式使用泛型,所以这不应该成为问题。
  • 我用 2019.1.1(终极版)成功测试了这个,你提到的错误没有发生在我的代码上。
【解决方案2】:

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

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

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

这比使用常规的“分析>检查代码...”运行每个代码检查要快得多

【讨论】:

    【解决方案3】:

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

    搜索:

    new (\w+)<.+>
    

    并替换为:

    new $1<>
    

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

    【讨论】:

    • 为了避免匿名内部类的问题,如果您可以假设开头{ 在同一行上,您可以使用否定前瞻:new (\w+)&lt;.+&gt;([^{]+)(?!\{)$ 并替换为@ 987654325@
    • 也在 NetBeans 中使用编辑 > 替换 > 包含文本 new (\w+)&lt;.+&gt;替换为 new $1&lt;&gt; 并且不要忘记选择 匹配:正则表达式在替换为字段上方的下拉列表中(默认为文字)
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      这可以使用 Netbeans 内置功能“检查和转换”来完成。

      1. 打开Refactor -> Inspect and Transform
      2. 使用Single Inspection:Can Use Diamond
      3. 点击Inspect
      4. 点击Do Refactoring

      【讨论】:

      • JDK 迁移支持 -> 可以使用 Diamond
      【解决方案6】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-28
        • 1970-01-01
        • 1970-01-01
        • 2020-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多