以下内容无法编译
@Builder
public class ExampleClass {
private final String field1;
private final int field2;
private ExampleClass (String field1, int field2) throws JAXBException {
// all args constructor that might throw an exception
}
}
因为java: unreported exception javax.xml.bind.JAXBException in default constructor
原因可能是因为build()
方法没有声明它可能抛出构造函数可能抛出的已检查异常。
有没有办法让Lombok在没有明确实现build()
方法的情况下声明这一点?
@Builder
public class ExampleClass {
private final String field1;
private final int field2;
private ExampleClass(String field1, int field2) throws JAXBException {
// all args constructor that might throw an exception
}
/**
* I don't want to explicitly declare this
*/
public static class ExampleClass Builder {
public ExampleClass build() throws JAXBException {
return new ExampleClass(field1, field2);
}
}
}
答案 0 :(得分:3)
这只有在您没有编写任何显式构造函数的情况下才有效 你自己。如果你有一个显式的构造函数,请将@Builder注释放在构造函数而不是类上。
将@Builder
注释移动到构造函数,它将起作用:
public class Foo {
private final String field1;
private final int field2;
@Builder
private Foo(String field1, int field2) throws JAXBException
{
this.field1 = field1;
this.field2 = field2;
throw new JAXBException("a");
}
}
来自文档