【问题标题】:Val in Lombok produces "incompatible types" error in IntelliJ but still compiles fineLombok 中的 Val 在 IntelliJ 中产生“不兼容的类型”错误,但仍然可以正常编译
【发布时间】:2016-12-10 11:25:31
【问题描述】:

我找到了这段代码:

Class<? extends Enum> enumClass = Class.forName(Charsets.class.getName())
                                       .asSubclass(Enum.class);

我想用 Lombok 重构它,但是发生了一些意想不到的事情。当我将其更改为:

val enumClass = Class.forName(Charsets.class.getName())
                     .asSubclass(Enum.class);

我收到了这个错误:

令人惊讶的是代码编译良好,并且使用它的测试通过了。

我不确定这是否是 Lombok 插件、IDE 中的错误,或者我做错了什么。 Lombok 不应该能够轻松推断出变量的正确类型吗?

我的问题是:我可以安全地使用该代码还是应该恢复到原始代码?

我正在使用最新的(此时)InteliiJ:

IntelliJ IDEA 2016.3

构建 #IU-163.7743.44,构建于 2016 年 11 月 17 日

JRE:1.8.0_112-release-408-b2 amd64

JVM:JetBrains s.r.o 的 OpenJDK 64 位服务器虚拟机

和 Lombok 插件:

龙目岛插件

版本:0.13.16

【问题讨论】:

  • 这是一个实验性功能,可能 IDEA 使用的插件还不支持所有实验性功能
  • @AndrewTobilko 是的,我知道这一点,但我已经使用它一段时间了,以前从未遇到过这个问题。
  • 另外,delombok 似乎不适用于这个,所以最好知道在幕后生成了什么。
  • 看来asSubClass 的返回类型没有被intellij 正确推断出来。您可以使用类型提示,例如.&lt;Enum&gt;asSubclass(Enum.class) 并且错误消失了。然后当然 intellij 会显示“可以推断出显式类型参数”的弱警告。啊。

标签: java intellij-idea lombok


【解决方案1】:

Preferences &gt; Plugins >IntelliJ

安装最新版本的 Lombok 插件

【讨论】:

    【解决方案2】:

    确认可与 IntelliJ IDEA 2018.1.1Lombok Plugin 0.17-2018.1

    【讨论】:

      猜你喜欢
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      相关资源
      最近更新 更多