2012-04-24 1 views
0

Javaクラスオブジェクトを検証して、メンバーが特定のルールに従っているかどうかをチェックしたいと考えています。特定のルールを除いて、null /空の文字列メンバーがあるかどうかを確認する必要があります。Javaのクラスのメンバーの妥当性確認

これを行う良い方法は何ですか(文字列メンバーの検証)?

私のアプローチは、次のとおりです。

if(StringUtils.isNotEmpty(sMember1) && StringUtils.isNotEmpty(sMember2)...) 

は文字列であるすべてのメンバーを検証する簡潔なアプローチはありますか?

は(はい、それは高価な操作になりますか?可能性リフレクションですか?)そのためのフレームワークとLIBSがたくさんあります

答えて

1

@krishnakumarpが指摘しているようにJSR 303を使用することをお勧めします。私は独自のフレームワークを構築することはできませんが、すでに利用可能なものはすべて使用します。しかし、あなたはそれを実装する方法を学習したい場合は、それは実際には非常に簡単です:

public static Collection<ErrorMessage> validate(Object obj) { 
    Collection<ErrorMessage> errors = new ArrayList<ErrorMessage>(); 
    Field[] fields = obj.getClass().getDeclaredFields(); 
    for (Field field : fields) { 
     field.setAccessible(true); 
     if (field.getType().equals(String.class)) { 
      try { 
       String value = (String) field.get(obj); 
       if (isEmpty(value)) { 
        errors.add(new ErrorMessage(field.getName() + " is empty")); 
       } 
      } 
      catch (Exception e) { 
       // oops. 
       e.printStackTrace(); 
      } 
     } 
    } 
    return errors; 
} 

この例では、カスタムエラー処理と各検証エラーのためErrorMessageオブジェクトがあることに、注意してください創造された。

0

同じオブジェクトのsettersメソッドを使用してメンバーを設定すると、メンバーの妥当性をチェックするのはなぜですか?操作を行う前にオブジェクトのメンバーの妥当性をチェックするのは良いことですが、IMO設定されるとすぐに妥当性を確認するのは良いことです。値が不適切な場合は、(コアクラス内の)操作で上位レイヤに適切な例外をスローします。

注:このアプローチは、従来のスニペットを再作成していなくても新しいデータオブジェクトを作成している場合には実現可能です。