在Java中检查对象的NULL的最佳方法

我有一个解决方案来检查从对象中提取的NULL值,但我觉得可能有比我在这里做的更好的方法。 所以请建议我使用代码片段的最佳方法 🙂

我将把我的xml内容传递给unmarshalling方法然后将unmarshalledValues传递给null check方法(即ValidateInputFiled)

Contents unmarshalledValues = unmarshalingContent( xml ); inputCheck = ValidateInputField( unmarshalledValues ); 

我有一个POJO用于​​我的XML元素,如下所述,

  @XmlRootElement( name = "contents" ) public class Contents { @XmlElement String A; @XmlElement String B; @XmlElement String C; @XmlAttribute String D; public String getA() { return A; } public String getB() { return B; } public String getC() { return C; } public String getD() { return D; } } 

我已经定义了ValidateInputFiled,如下所述

 public Boolean ValidateInputField( Contents unmarshalledValues ) { int checker = 0; Boolean listCheck = false; // Extracting unmarshalled values from xml String A= unmarshalledValues.getA(); String B= unmarshalledValues.getB(); String C = unmarshalledValues.getC(); String D= unmarshalledValues.getD(); if ( A== null || A.isEmpty() ) { checker++; } if ( B== null || B.isEmpty() ) { checker++; } if ( C== null || C.isEmpty() ) { checker++; } if ( D== null || D.isEmpty() ) { checker++; } if ( checker == 0 ) { listCheck = true; } return listCheck; } 

在这里,我希望避免对每个字符串值(即A,B,C,D)进行NULL检查,而不是我可以使用集合或列表对内容或unmarshalledValues进行空检查吗?

这是你在找什么?

 public Boolean ValidateInputField(Contents unmarshalledValues) { // Extracting unmarshalled values from xml String A = unmarshalledValues.getA(); String B = unmarshalledValues.getB(); String C = unmarshalledValues.getC(); String D = unmarshalledValues.getD(); return checkNull(A, B, C, D); } private static boolean checkNull(String... strings) { for (String string : strings) { if (string == null || string.isEmpty()) { return false; } } return true; } 
 public static boolean isNullOrEmpty(String a) { return a == null || a.isEmpty(); } 

为每个值调用它。 您可能想要考虑将它们全部添加到列表中,然后迭代它们,如果它们是,则递增检查器!isNullOrEmpty以保存代码膨胀,如果您有很多字段。

PS:将您的字段设为私有以保留封装。

pps:不要打扰单独的布尔值只return checker == 0; 保持代码整洁。

我使用apache commons StringUtils库来处理这类事情。 它有一个包含空格或空格的检查,以及其他组合,具体取决于您处理空格的方式。 像杰夫这样的代码给了你,但我喜欢他们包含的其他方法。

如果值== null,您还可以通过编写getter来返回“”来完全避免null。 然后,您不必检查每个字段是否为null。

commons-lang有一个你可以使用的Validate类:

 Validate.notNull( unmarshalledValues.getA() ); 

Java 8的非reflection解决方案,不使用一系列if,将流式传输所有字段并检查空值:

 return Stream.of(id, name).allMatch(Objects::isNull); 

这仍然很容易保持,同时避免reflection锤。 对于null属性,这将返回true。