2

オブジェクトから抽出されたNULL 値をチェックする解決策がありますが、ここで行っているよりも最善の方法があると思います。だから、コードスニペットで最善の方法を提案してください:)

xml コンテンツをアンマーシャリング メソッドに渡し、unmarshalledValues を null チェック メソッド (つまり 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 の null チェックを行うことはできますか?

4

5 に答える 5

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

値ごとにそれを呼び出します。それらをすべてリストに追加してから繰り返し処理し、フィールドがたくさんある場合にコードの肥大化を防ぐために、!isNullOrEmpty の場合はチェッカーをインクリメントすることを検討することをお勧めします。

PS: カプセル化を維持するために、フィールドを非公開にしてください。

return checker == 0;pps:コードをきれいに保つためだけに別のブール値を気にしないでください。

于 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

commons-lang には、使用できる Validate クラスがあります。

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

一連の if を使用しない Java 8 の反射しないソリューションは、すべてのフィールドをストリーミングして null かどうかをチェックすることです。

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

これは、リフレクション ハンマーを回避しながら維持するのが非常に簡単なままです。これは、null 属性に対して true を返します。

于 2017-04-03T09:37:53.867 に答える
0

この種のものには、apache commons StringUtils ライブラリを使用します。null または空のスペースに加えて、空のスペースの処理方法に応じたその他の組み合わせを含むチェックがあります。ここで提供された Jeff のようなコードはほとんどありませんが、他のメソッドが含まれているのが好きです。

値 == null の場合に "" を返すようにゲッターをコーディングすることで、null を完全に回避することもできます。そうすれば、各フィールドの null をチェックする必要がなくなります。

于 2012-06-08T15:31:04.010 に答える