【问题标题】:Why is IntelliJ saying that a class constructor is incorrect despite compiling?为什么 IntelliJ 说尽管编译了类构造函数不正确?
【发布时间】:2012-03-11 12:47:15
【问题描述】:

我正在尝试使用外部 jar 中的类来实例化一个对象。这是一个团队成员正在开发并最近更改了接口方法的 jar。

问题在于 IntelliJ 仍然认为类构造函数应该采用 4 个参数(旧接口)而不是 3 个(新接口)。

我可以保证模块依赖中的jar是新版本的。代码确实成功编译这一事实进一步证实了这一点。

所以我的问题是,为什么 IntelliJ 仍然认为我应该使用旧界面?它是否有某种未正确更新的缓存?

附上的截图演示了这个问题。

谢谢。

【问题讨论】:

  • 尝试 new IPRing("localhost", 9001, 9001 +"") 并告诉您会发生什么
  • “问题在于 IntelliJ 仍然认为类构造函数应该采用 4 个参数(旧接口)而不是 3 个(新接口)。” [原文如此]...措辞有点令人困惑,因为 Java 对单词/关键字“接口”有一个非常精确的定义,这似乎与您使用该词的方式不同:)
  • 你在用maven吗?如果是,有一个“重新导入所有 maven 项目”按钮。
  • @deporter 问题在于参数的数量,而不是数据类型。将第三个参数更改为 String 仍然是因为构造函数需要一个 int。
  • @Vic Maven 正在使用,但不适用于那个特定的 jar。该 jar 仅位于本地 lib 文件夹中。无论如何都会尝试,但我认为这不是问题。

标签: java interface jar intellij-idea intellisense


【解决方案1】:

右键单击您的项目并选择Refresh。您的项目正在使用已更改的已编译 jar,但您的 IDE 仍在使用旧的已编译 jar,就像加载它时一样(即使新源可能在相关项目中可见)。

Eclipse 也有同样的问题。

【讨论】:

    【解决方案2】:

    尝试在构造函数中移动光标,然后按 ctrl + b,它会跳转到构造函数的声明,这将让你有机会再次检查构造函数是否正确。

    您也可以尝试“文件”菜单下的“无效缓存”,这将清除缓存并为您的项目重建索引。

    【讨论】:

      【解决方案3】:

      可能 IntelliJ 的索引信息已过期,因为它没有注意到您切换了 jar 依赖项。

      至少可以通过重新启动 IDE 来解决此问题,然后重新扫描并重建索引。

      【讨论】:

      • 这就是我第一次发生时的假设。试了一下还是没用:(
      【解决方案4】:

      您还可以从文件夹 cachesindex 中删除所有文件,例如这里 c:\Documents and Settings\User.IntelliJIdea\system\(当然您可以有另一个路径)并尝试再次启动 IDE。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-16
      • 2021-01-26
      • 2019-05-17
      • 2012-05-01
      • 2015-12-29
      • 1970-01-01
      • 2020-11-25
      • 2021-06-23
      相关资源
      最近更新 更多