2

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

我会将我的 xml 内容传递给解组方法,然后将 unmarshalledValues 传递给空检查方法(即 ValidateInputFiled )

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

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

 @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 检查,而是可以只使用集合或列表对 Contents 或 unmarshalledValues 进行空检查吗?

4

5 回答 5

6
public static boolean isNullOrEmpty(String a) {
    return a == null || a.isEmpty();
}

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

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

pps:不要return checker == 0;为了保持代码整洁而使用单独的布尔值。

于 2012-06-08T15:26:44.513 回答
4

那是你要找的吗?

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;
}
于 2012-06-08T15:33:28.460 回答
0

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

如果值 == null,您还可以通过将 getter 编码为返回 "" 来完全避免空值。这样您就不必检查每个字段是否为空。

于 2012-06-08T15:31:04.010 回答
0

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

Validate.notNull( unmarshalledValues.getA() );
于 2012-06-08T16:19:42.940 回答
0

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

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

在避免反射锤的同时,这仍然很容易维护。这将为空属性返回 true。

于 2017-04-03T09:37:53.867 回答