Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Lombok生成器能否处理可能引发异常的构造函数?_Java_Exception Handling_Builder_Lombok - Fatal编程技术网

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类型时,您的解决方案才起作用