我在 Intellij Idea 中使用 lombok 生成的构建器。显示我可以创建的问题的最小示例是
import java.io.IOException;
import lombok.AllArgsConstructor;
import lombok.Builder;
class Base { }
@Builder
@AllArgsConstructor
class Scratch extends Base {
String attr;
String attr2;
public Scratch(Base b) throws IOException {
throw new IOException();
}
public static void main(String[] args) {
Scratch.builder().attr("1").attr2("2").build(); // Idea shows an error here
}
}
Idea 在调用行中显示错误build()
并抱怨Unhandled exception: java.io.IOException
. 但是代码是可从命令行编译和运行的。idea 和命令行中的 java 编译器与 java 8 的版本相同。当我尝试“delombok”idea 中的代码时,我看到生成的想法ScratchBuilder.build
是:
public Scratch build() throws IOException {
return new Scratch(attr, attr2);
}
奇怪的是,虽然生成的所有参数构造函数没有抛出任何东西,但 build 方法中有一个 throws。如果我只是从 build 方法中删除 throws 子句,Idea 就会停止抱怨。
为什么idea认为build方法应该有一个throws?