Lombok Builder可以处理可能抛出异常的构造函数吗?

时间:2018-04-10 10:04:03

标签: 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
    }
}

因为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);
        }
    }
}

1 个答案:

答案 0 :(得分:3)

来自the documentation

  

这只有在您没有编写任何显式构造函数的情况下才有效   你自己。如果你有一个显式的构造函数,请将@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");
    }
}

来自文档