Lombok - 如何为 @SuperBuilder 创建可抛出的默认构造函数

问题描述 投票:0回答:1

我正在使用 Lombok @SuperBuilder,并尝试在 Lombok 中创建一个可能引发异常的默认构造函数。以下代码有效:

@SuperBuilder(toBuilder = true)
private class SomeBuilderBase {
    private final String someString;
    
    protected SomeBuilderBase(SomeBuilderBaseBuilder<?,?> b) {
        someString = b.someString;
    }
}

当我将默认构造函数设置为可抛出时,我会抛出以下异常:

@SuperBuilder(toBuilder = true)
private class SomeBuilderBase {
    private final String someString;
    
    protected SomeBuilderBase(SomeBuilderBaseBuilder<?,?> b) throws Exception {
        someString = b.someString;
    }
}

错误:未报告的异常默认构造函数中的异常 @SuperBuilder(toBuilder = true)

我怀疑在撰写本文时这可能是 Lombok 的限制(我正在使用 Lombok v1.18.32),但我想知道是否有任何我错过的东西才能使其正常工作。目前,我正在开发这个,但它很快就会变得丑陋并且很难维护。

java lombok
1个回答
0
投票

正如 @Chaosfire 在评论中提到的,有一个解决方法,构造函数抛出未经检查的异常(使用

@SneakyThrows
):

@SuperBuilder(toBuilder = true)
private class SomeBuilderBase {
    private final String someString;

    @SneakyThrows
    protected SomeBuilderBase(SomeBuilderBaseBuilder<?,?> b) {
        someString = b.someString;
        if (someString.isEmpty()) {
            throw new NullPointerException();
        }
    }
}

这不会产生编译器错误并生成异常。然而,这并不是最优的,因为我们丢失了有关

build()
操作可能导致的问题的信息。不过,问题就这样解决了。

© www.soinside.com 2019 - 2024. All rights reserved.