Java Lombok生成器能否处理可能引发异常的构造函数?
以下内容不可编译Java Lombok生成器能否处理可能引发异常的构造函数?,java,exception-handling,builder,lombok,Java,Exception Handling,Builder,Lombok,以下内容不可编译 @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
@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:default构造函数中未报告的异常javax.xml.bind.JAXBException
这可能是因为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);
}
}
}
发件人:
只有在没有编写任何显式构造函数的情况下,这才有效
你自己如果确实有显式构造函数,请将@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");
}
}
从文档中看为什么不将构造函数中的代码包装成一个try catch?我不想包装构造函数代码,这样它就会抛出一个未检查的异常,因为当它抛出相应的已检查异常时,我认为这是一个更干净的契约。我确实尝试过,但我不小心还保留了类级注释,这导致了同样的错误。当将
@Builder
注释仅放在构造函数中时,您的解决方案才起作用。我认为,只有当抛出的异常是uncheck/runtime类型时,您的解决方案才起作用