【问题标题】:Ambiguous method call using Project Lombok使用 Project Lombok 的模糊方法调用
【发布时间】:2018-05-03 19:04:55
【问题描述】:

我有以下代码:

import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
public class NameParserResponse {
    private boolean match;
}


public class Main {

    public static void main(String[] args) {
        NameParserResponse nameParserResponse = NameParserResponse.builder().build();
        nameParserResponse.isMatch();
    }
}

当尝试引用 isMatch() 时,我得到:

Ambiguous method call. Both

isMatch () in Response and
isMatch () in Response match

我也尝试删除 @Builder 注释,但这没有帮助。

【问题讨论】:

  • 请显示更多代码。
  • 您是否尝试过重建项目和/或使 Intellij 缓存无效?此外,您是单独使用 intellij 还是与一些构建工具(如 maven 或 gradle)配对使用?
  • 我正在使用带有 Intellij 的 Maven,并且我尝试运行清理命令,并执行了无效缓存/重启选项。我实际上只是用上面的代码创建了一个全新的项目,但仍然是同样的问题。
  • 您是否尝试过删除@Getter 并自己制作一个名为isMatch() 的吸气剂?问题是否仍然存在?
  • 去掉@Getter后,没有报错。另外,我正在使用 Lombok 1.16.20 和最新版本的 Intellij/Lombok 插件。

标签: java intellij-idea lombok intellij-lombok-plugin


【解决方案1】:

看起来除了Project Lombok 插件之外,我还安装了Hrisey Intellij 插件。我一定是在寻找Project Lombok 插件时不小心安装了这个。

禁用此插件后,问题不再存在。

【讨论】:

    【解决方案2】:

    IntelliJ 对代码进行了“de-Lombok”重构,这会将 Lombok 的魔力扩展到它在幕后自动生成的更冗长的代码中。当我以前遇到过这样的怪事时,查看实际生成的代码,而不是仅仅猜测它,有助于使问题更加清晰。 YMMV。

    祝你好运。

    【讨论】:

    • 谢谢 - 我已经检查了源代码。没有模棱两可的“isMatch”方法,甚至没有两个名为 this 的方法。奇怪的是它只是在我的工作电脑上,在家里不会出现这个问题。我正在尝试检查两种环境之间的差异。我在 Intellij/Lombok 上是最新的。
    • 我刚刚想到的一个区别是我在家里使用的是 Intellij Ultimate 版本,而在工作中使用的是 Community Edition。嗯……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 2016-06-19
    相关资源
    最近更新 更多