首页 文章

使用@NonNull检查类成员

提问于
浏览
3

假设我有一个有3个成员的 class :

Class A {
    private String string1; /** Cannot be null */
    private String string2; /** Cannot be null */
    private String string3; /** Can be null */
}

我有2个方法接受这个类的对象作为参数 . 其中一种方法需要检查非可空字段是否存在,而在另一种方法中,它无关紧要:

public int func1(A object); /** Check non nullable fields */
public int func2(A object); /** No check required */

有没有干净的方法呢?使用@NonNull注释还是什么?

我尝试了各种方法,但没有一种方法可行 . 所有NonNull只能帮助确保setter不会作为参数获取null . 或者对象本身不为null .

我似乎无法找到对对象进行这种递归null检查的东西 .

如果你们中的任何人能帮忙的话会很棒 . :)

3 回答

  • 2
    class A {
        @NotNull
        private String string1; /** Cannot be null */
        @NotNull
        private String string2; /** Cannot be null */
        private String string3; /** Can be null */
    }
    

    并且在方法签名中有 @Valid

    public int function(@Valid A object)
    
  • 1

    你需要一个bean Validator,一个用来检查bean是否正常的类 . 在Spring中有许多实现 . 例如,请参阅SmartValidatorLocalValidatorFactoryBean

    @valid注释是一种自动调用验证器的好方法 . 在使用Spring时,您可以避免手动创建验证器 . 它只适用于Spring(或任何等效容器)调用该方法的情况 . 您可以在BindingResult对象中获得验证结果 . 例如:

    @RequestMapping(value = "/MyPath", method = RequestMethod.POST)
    public String postCostForm(Model model, @Valid MyForm myForm, BindingResult result){                        
            if(result.hasErrors()){             
                for(ObjectError error : result.getAllErrors()){
                      // Do something
                }                               
                return "/error";
            }else{
                return "/success";
            }
    }
    

    验证非常强大,有时甚至很复杂 . 您可以创建验证组并仅检查其中一组 . 您可以创建自定义约束标记,可以调用验证方法,并且可以在验证失败时自定义和国际化返回的消息 .

  • 0

    Spring's 中使用 @Required 注释

    private String string1;
    
    @Required
    public void setString1(String string1) {
      this.string1= string1;
    }
    

相关问题