0

我在 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?

4

1 回答 1

0

问题中描述的问题是 lombok-intellij-plugin 中的错误。我在 github 中报告了该错误,Michail Plushnikov 接受了错误报告并更正了 lombok-intellij-plugin 中的错误。有关详细信息,请参阅https://github.com/mplushnikov/lombok-intellij-plugin/issues/740

于 2020-02-26T06:49:15.370 回答