1

この問題に何度か遭遇したので、ここでベストプラクティスを尋ねます

私はいくつかのオブジェクトを真にし、それらを変更し、いくつかのフラグを立てるプロセスを持っています。

    boolean erros = false;
    for(MyData data: allData){
    //...

        //@ToDo  move this to a function titleCheck()
        if(data.getTitle().isEmpty()){
            data.setTitle('none');
            erros = true;
        }

        if(data.getTitle().equals('BIG')){
            data.setTitle('small')
        }

        if(data.getTitle().equals('error')){
            errors = true;
        }

    //...
    }

データを更新し、1つ以上のフラグを変更する関数が必要なので、推奨される構文は次のようになります。

MyData updatedData = titleCheck(MyData data, &erros){...}

しかし、ブール値は参照によって渡すことができないため、機能していました。

boolean errors = titleCheck(MyData dataForUpdate){...}

魔女はあまり直感的ではありません..(少なくとも私にとっては... PHPのバックグラウンドから来ています)更新するフラグがいくつかある場合、問題はさらに大きくなります。

だから..そのような構造を処理するための適切なJavaの方法は何ですか。

4

2 に答える 2

3

これを行うとき:

titleCheck(MyData data);

上記のコードを考えると、実際にはデータオブジェクトを変更しているのであり、これのコピーではありません。したがって、成功/失敗ブール値を返すことができ、渡されたオブジェクトを返す必要はありません。これで、これらの値をORすることができます。

boolean error = false;
error |= titleCheck(...);
error |= nameCheck(...);

オブジェクトとステータスを戻したい場合は、次のように簡単にリターンクラスを宣言できます。

class ReturnResult {
   public boolean error;
   public MyData data;
}

(単純な構造として使用しているため、フィールドを公開しました)。このアプローチの利点は、OOを使用して関連するオブジェクトを結び付けることです。また、上記のクラスにメソッドを配置して、連続する結果を簡単にマージできるようにすることができます。

MyData最後に、オブジェクトに対して多くのメソッドを呼び出し、そのオブジェクトの外部で成功/失敗を判断していることに注意してください。私はむしろこれをオブジェクトに置きたいと思いMyDataます。isValid()次に、MyDataオブジェクトはそれ自体の有効/無効な状態を格納でき、メソッドなどを介して独自の状態を要求できます。これは、ここで物事を行う非常にOOな方法のようです。

于 2012-12-06T11:59:32.547 に答える
1

Javaは参照渡しをサポートしていません。参照でさえ値によって渡されます。

boolean[]提案したことを行うには、またはなどのオブジェクトへの参照を渡し、AtomicBoolean代わりにそれを使用する必要があります。

于 2012-12-06T11:56:58.213 に答える