繁体   English   中英

测试非null字段的更好方法

[英]Better way to test non null fields

我有一个包含一些字段的对象,我想检查某些字段是否不为null和不为空。 在Java 8或apache实用程序中是否有一个很好的方法...

我不想做类似的事情

if(myObj.getMyField1 != null || myObj.getMyField1 != "" || myObj.getMyField2 != null || myObj.getMyField2 != "" || myObj.getMyField3 != null || myObj.getMyField3 != "") {} 

这是myObj

@Data // lombok for generating getters and setters
public class Myobj {
   private String myField1;
   private String myField2;
   private String myField3;
   private String myField4;
   private String myField5;

   private AnotherObj myField6;

}

您有什么建议吗?

您可以使用java-8 Stream#anyMatch来检查字符串是否为null或为空。 例如:

boolean hasNullOrEmptyString = Stream.of(myField1,myField2,...,myFieldN)
                                     .anyMatch(it-> it==null || it.isEmpty());

或者,您可以将lambda表达式替换为方法引用表达式,该方法引用可在以后重用:

boolean hasNullOrEmptyString = Stream.of(myField1,myField2,...,myFieldN)
                                     .anyMatch(this::isNullOrEmptyString);

boolean isNullOrEmptyString(String it){
  return it==null || it.isEmpty();
}

或者,正如我看到的标记为spring的问题一样,spring已经具有实用程序方法StringUtils#isEmpty用于检查String是否为null或为空:

boolean hasNullOrEmptyString = Stream.of(myField1,myField2,...,myFieldN)
                                     .anyMatch(StringUtils::isEmpty);

您已将其标记为spring-boot,所以我假设您可能正在使用控制器并验证其参数。 如果是这样,那就做

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

@Data
public class Myobj {
   @NotNull
   @Size(min = 1)
   private String myField1;
   @NotNull
   @Size(min = 1)
   private String myField2;
   /* etc */
}

@RequestMapping(value = "/some/url", method = POST)
public void yourMethod(@RequestBody @Valid YourObject yourObject) {
    // 
}

然后,将在实例化时验证您的对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM