2016-08-06 20 views
1

Vor einem DB-Aufruf setze ich einige Daten aus einer Map in ein Objekt, indem ich die Setter-Methoden für den DB-Aktualisierungsaufruf verwende. Jetzt enthält die Karte möglicherweise keine Daten mehr. Nun möchte ich wissen, dass es anstelle des Hinzufügens von Code zum Überprüfen von NULL für jedes Feld vor dem Hinzufügen von Daten zu dem Objekt bessere Möglichkeiten gibt, dies zu tun, indem die Anzahl der IF zum Überprüfen von Nullwerten reduziert wird, bevor Setter aufgerufen wird Methoden.Nullbedingungen für Setter-Aktion besser verarbeiten

Ich habe Bedingungen wie unten jetzt

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)); 
} 

Eine Möglichkeit, offensichtlich Reflexion verwendet wird, aber ich möchte wissen, ob es noch andere Möglichkeiten, um auch dies zu tun.

+1

Bitte zeigen Sie Ihren aktuellen Code an –

+0

Warum prüfen Sie vor dem Setzen des Wertes auf Null? Sind die Instanzvariablen in der Klasse, die diese Setter enthält, primitive Typen? Wenn ja, warum nicht zu Wrappertypen ändern. object.setXxx (null) wird sowieso keinen Effekt haben, also warum nach null suchen? Warum nicht gleich die Setter anrufen? – CKing

+0

tatsächlich setze ich diese Werte, um DB Update durchzuführen. Ich habe ein Entity Objekt mit Hibernate geholt und ich muss die eingehenden Daten auf DB aktualisieren. object.setXXX (null) gibt keine Ausnahme, aber das wird dieses Feld auf NULL in der Datenbank aktualisieren, was ich nicht will. Das Überprüfen von Null ist hier also für jedes Feld, das nicht in der Karte vorhanden ist, trivial. – Raghav

Antwort

0

Beachten Sie, dass Sie den Anruf get(ATTRIBUTE1_VALUE) zweimal für jeden Zweig ausführen.

Stattdessen einfach containsKey(ATTRIBUTE1_VALUE) im if überprüfen.

Wenn die zu befüllende Logik valueMap kein Null für Schlüssel hinzufügt, ist das in Ordnung.

* Identifizieren Sie, wo Nullen entstehen können, und stoppen Sie sie dort, anstatt sie weiter unten im Stapel zu verarbeiten, als was hier passiert.

+0

Ja, das ist ein besserer Weg, um das zu handhaben. Aber ich muss noch procapsKey für jede Eigenschaft im Objekt rechts aufrufen. Wird das nicht die Komplexität der Klasse abnormal erhöhen? Oder es ist OK, containsKey für jede Eigenschaft zu überprüfen, die ich brauche zu aktualisieren? – Raghav

+0

Wenn Sie Null überprüfen möchten, benötigen Sie eine zusätzliche Überprüfung irgendwie durch! = null, enthält, mit java8 optional.Wenn Sie die Komplexität entfernen möchten, sollten Sie sicherstellen, dass die Karte ordnungsgemäß füllt, schreibt Standard Werte, wenn in der DB nichts gefunden wird – UserF40