1

メンバーが特定の規則に従っているかどうかを確認するために、Java クラス オブジェクトを検証したいと考えています。特定のルールを除いて、null/空の文字列メンバーがあるかどうかも確認したいと思います。

そのための良い方法は何ですか (文字列メンバーの検証)?

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

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

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

(リフレクションは可能ですか? もしそうなら、それは高価な操作になりますか?)

4

4 に答える 4

2

jsr 303 準拠のバリデーターを使用する必要があります。このディスカッションを参照してくださいJSR-303 (Bean Validation) の実装はありますか?

于 2012-04-24T10:55:40.517 に答える
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オブジェクトが作成されることに注意してください。

于 2012-04-24T11:14:53.833 に答える
0

同じオブジェクトのセッターメソッドを使用してメンバーが設定されている場合、メンバーの有効性を確認することを検討してみませんか? オブジェクトに対して操作を行う前に、オブジェクトのメンバーの有効性を確認するのは良いことですが、IMO では、オブジェクトが設定されたらすぐに検証することをお勧めします。値が不適切な場合は、(コア クラス内の) 操作が上位層に適切な例外をスローできるようにします。

注: このアプローチは、従来のスニペットをリファクタリングするのではなく、新しいデータ オブジェクトを作成する場合に実行できます。

于 2012-04-24T11:18:11.193 に答える
0

そのためのフレームワークとライブラリがたくさんあります。http://oval.sourceforge.net/を見てください。

于 2012-04-24T10:54:48.530 に答える