【发布时间】: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 正确推断出来。您可以使用类型提示,例如.<Enum>asSubclass(Enum.class)并且错误消失了。然后当然 intellij 会显示“可以推断出显式类型参数”的弱警告。啊。
标签: java intellij-idea lombok