【问题标题】:Lombok two nullable values but one must be presentLombok 有两个可为 null 的值,但必须存在一个
【发布时间】:2022-12-22 22:10:48
【问题描述】:

给定以下对象

@Getter
@Builder
@RequiredArgsConstructor
class Example {
    private final String maybeA;
    private final String maybeB;
}

是否可以在必须存在这些字段之一的地方添加约束?

所以我们可以有 A 和 B,A 或 B,但不能有 A 和 B。

【问题讨论】:

  • 两者都可以存在吗?或者必须确切地一个是非空的?如果是后者,您可能正在为这两种情况寻找一个具有两个子类的密封类。如果两者都可以存在但至少有一个必须存在,那么我认为 Lombok 无法帮助您,您只需要在构造函数中进行显式检查。
  • 如果我用另一种类型系统的语言解决了这个问题,我会确定满足您要求的类型,并且会使用这种类型的一个字段而不是两个String maybe_。我不确定这种方法在 Java 中是否可行
  • @SilvioMayolo 是的,两者都可以存在。很遗憾,这可能是不可能的。但谢谢你的回应

标签: java nullable lombok builder


【解决方案1】:

您可以使用 @AssertFalse,包 javax.validation.constraints 的注解:

@Getter
@Builder
@RequiredArgsConstructor
class Example {
    private final String maybeA;
    private final String maybeB;

    @AssertFalse
    private boolean oneFieldHasToExists() {
        return maybeA == null && maybeB == null;
    }
}

【讨论】:

    猜你喜欢
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多