Я борюсь с создателем ломбок в Intellij Idea. Минимальный пример, который показывает проблему, которую я мог создать, это
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
}
}
Идея показывает ошибку в строке с вызовом build()
и жалуется, что Unhandled exception: java.io.IOException
. Но код компилируется и запускается из командной строки. Компилятор java в идее и командной строке - это та же версия java 8. Когда я попытался "delombok" код в идее, я вижу, что сгенерированная идея ScratchBuilder.build
:
public Scratch build() throws IOException {
return new Scratch(attr, attr2);
}
Странно, в методе сборки есть броски, хотя сгенерированный конструктор всех аргументов ничего не бросает. Если я просто удалю предложение throws из метода build, Идея перестанет жаловаться.
Почему идея считает, что в методе build должны быть броски?