java - Lombok 构建器检查非空且不为空

标签 java builder lombok

我有一个包含变量的类,我不希望它为 null 或空。有没有办法使用 Lombok builder 来设置属性?我可以使用 @NonNull 但我无法验证它是否为空。显然,另一种选择是编写我自己的构建器来完成所有这些检查。例如:

class Person {
    @NonNull
    private String firstName;
    @NonNull
    private String lastName;

    public static class PersonBuilder() {
        // .
        // .
        // .
        public Person build() {
            //do checks for empty etc and return object
        }
    }
}

最佳答案

Maxim Kirilov 的回答不完整。它不检查空白/空字符串。

我以前遇到过同样的问题,我意识到除了使用来自 Lombok 的 @NonNull 和 @Builder 之外,还可以使用私有(private)访问修饰符重载构造函数,您可以在其中执行验证。像这样:

private Person(final String firstName, final String lastName) {
    if(StringUtils.isBlank(firstName)) {
        throw new IllegalArgumentException("First name can't be blank/empty/null"); 
    }
    if(StringUtils.isBlank(lastName)) {
        throw new IllegalArgumentException("Last name can't be blank/empty/null"); 
    }
    this.firstName = firstName;
    this.lastName = lastName;
}

此外,当 String 具有空白、空值或 null 值时,抛出 IllegalArgumentException 更有意义(而不是 NPE)。

关于java - Lombok 构建器检查非空且不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44855981/

相关文章:

cocoa - 为什么在 nib 中加载 nib 时会调用 awakeFromNib 两次?

java - Lombok @SuperBuilder 不带参数

java - 可以将默认实现添加到表示监听器的接口(interface)的方法中吗?

java - splitByWholeSeparatorPreserveAllTokens 和 split 之间的区别

xml - Ruby XML::Builder 元素名称中带有连字符

java - Java 中是否有一个功能可以确保该方法被调用

java - lombok 是否适用于 Java 12?

java - Lombok @Data 是否会覆盖现有的 toString 和 hashCode 方法?

Java:如何从浏览器调用服务器上运行的代码? (跟进问题)

java - JTable在java中的JFrame中没有完全显示