2016-08-06 9 views
1

DBコールの前に、DB更新呼び出しのセッターメソッドを使用して、マップからオブジェクトにいくつかのデータを設定しています。現在、地図にはデータがない場合があります。より良い方法でセッターアクションのnull条件を処理する

私が知りたいことは、オブジェクトにデータを追加する前に各フィールドのnullをチェックするコードを追加するのではなく、setterを呼び出す前にnull値をチェックするIFの数を減らしてこれを行うより良い方法があるかどうかです。メソッド。

私は今、以下のような条件

if(valueMap.get(ATTRIBUTE1_VALUE) != null){ 
    object.setAttribute1Value(valueMap.get(ATTRIBUTE1_VALUE)); 
} 
if(valueMap.get(ATTRIBUTE2_VALUE) != null){ 
    object.setAttribute2Value(valueMap.get(ATTRIBUTE2_VALUE)); 
} 
if(valueMap.get(ATTRIBUTE3_VALUE) != null){ 
    object.setAttribute3Value(valueMap.get(ATTRIBUTE3_VALUE)); 
} 
if(valueMap.get(ATTRIBUTE4_VALUE) != null){ 
    object.setAttribute4Value(valueMap.get(ATTRIBUTE4_VALUE)); 
} 
if(valueMap.get(ATTRIBUTE5_VALUE) != null){ 
    object.setAttribute5Value(valueMap.get(ATTRIBUTE5_VALUE)); 
} 

一つの方法は、明らかにリフレクションを使用していましたが、私もこれを行うには、他の方法があるかどうかを知りたいです。

+1

現在のコードを表示してください –

+0

なぜ値を設定する前にnullをチェックしていますか?これらのセッターを含むクラスのインスタンス変数はプリミティブ型ですか?はいの場合は、ラッパータイプに変更しないでください。 object.setXxx(null)は何の効果もないので、なぜnullをチェックするのですか?なぜセッターに電話をしてみませんか? – CKing

+0

実際に私はDB更新を実行するためにこれらの値を設定しています。私は、hibernateを使用してエンティティオブジェクトを取得し、私はDBに受信データを更新する必要があります。 object.setXXX(null)は例外を出すことはありませんが、データベース内のそのフィールドをNULLに更新します。これは不要です。だから、nullをチェックすることは、マップにはないフィールドについてはここでは簡単です。 – Raghav

答えて

0

各ブランチに対してget(ATTRIBUTE1_VALUE)コールを2回実行します。

代わりにifのチェックでcontainsKey(ATTRIBUTE1_VALUE)を実行してください。

valueMapを入力するロジックがキーにnullを追加していない場合、これは問題ありません。

*ここで発生しているように、ヌルが発生する可能性のある場所を特定し、スタック内で処理する代わりに、ヌルがどこで発生して停止するかを特定します。

+0

はい、thatsしかし、私はまだオブジェクトの各プロパティのcontainsKeyを呼び出す必要があります。それはクラスの複雑さを異常に増加させませんか?それとも、必要な各プロパティ更新するには? – Raghav

+0

nullをチェックする場合は、!= null、contains、java8 optionalを使用してチェックを追加する必要があります。 DBなどに何も見つからない場合の値 – UserF40

関連する問題