2017-06-30 27 views
1

我有一个类与变量我不希望它为空或空。有没有办法使用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 
     } 
    } 
} 

回答

3

的builder注释应该解决您的问题:

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

生成的代码是:

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

    @ConstructorProperties({"firstName", "lastName"}) 
    Person(@NonNull String firstName, @NonNull String lastName) { 
     if(firstName == null) { 
      throw new NullPointerException("firstName"); 
     } else if(lastName == null) { 
      throw new NullPointerException("lastName"); 
     } else { 
      this.firstName = firstName; 
      this.lastName = lastName; 
     } 
    } 

    public static Person.PersonBuilder builder() { 
     return new Person.PersonBuilder(); 
    } 

    public static class PersonBuilder { 
     private String firstName; 
     private String lastName; 

     PersonBuilder() { 
     } 

     public Person.PersonBuilder firstName(String firstName) { 
      this.firstName = firstName; 
      return this; 
     } 

     public Person.PersonBuilder lastName(String lastName) { 
      this.lastName = lastName; 
      return this; 
     } 

     public Person build() { 
      return new Person(this.firstName, this.lastName); 
     } 

     public String toString() { 
      return "Person.PersonBuilder(firstName=" + this.firstName + ", lastName=" + this.lastName + ")"; 
     } 
    } 
} 

在这种情况下对象的构造过程中的空审定会发生。

+0

对我的问题很好的答案,但它不是针对问题的 - not_empty检查不存在 –

2

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

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

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; 
} 

此外,投掷抛出:IllegalArgumentException更有意义(而不是NPE)当字符串中有空白,空白或空值。