NullPointerException
ist immer ein Code-Clutterer. Sie müssen prüfen, ob jedes Objekt null-sicher ist und keine NPE werfen.Wie die NullPointerException sichere Methode und Ausdrücke zu codieren?
stieß ich auf eine Situation:
public void aMethod(Employee emp){
String fullEmployeeDetailRow = "Name: "+emp.getName().getFirstName()
+"LastName :"+emp.getName().getFirstName()
+"Address:"
+emp.getAddress().getBillingAddress().getBuildingNumber().getApartmentNumber()
+" "
+emp.getAddress().getBillingAddress().getStreetName()
}
In obigem Beispiel gibt es so viele Möglichkeiten der NPE ist. Zum Beispiel in
emp.getAddress().getBillingAddress().getBuildingNumber().getApartmentNumber()
Ausdruck, rufen zu
getAddress() or getBillingAddress() or getBuildingNumber()
jeder null und wahrscheinlich NPE Quelle sein kann. Also muss ich jetzt meinen Code durcheinander bringen, um zu prüfen, ob jeder null sein kann.
Meine Frage/Der Gedanke ist: Gibt es eine Möglichkeit in Java, ein Verfahren zu schaffen, die einen Ausdruck nimmt und zu bewerten, ob es NullPointerException
wirft und wenn ja dann einen Standardwert zurückgeben, sagen eine leere " "
?
Also in diesem Fall brauche ich eine Methode
expression=emp.getAddress().getBillingAddress().getBuildingNumber().getApartmentNumber()
String checkForNPE(expression){
try{
return expression;
}catch(NullPointerException e){
return " " // default Value
}
}
Problem ist, wenn ich versuche, eine Methode wie diese zu erstellen, und übergeben ihm einen Ausdruck wertet Java den Ausdruck VOR dem Aufruf Methode und NPE wird vorher geworfen!
Wie kann ich den Ausdruck an die Methode übergeben und Java nur innerhalb der Methode auswerten lassen?
Warum machen Sie nicht den Versuch Block dort, wo Sie den Ausdruck initialisieren? – Dimi
@Dimi Das versuche ich zu vermeiden. Ich versuche zu vermeiden, den Ausdruck in meinem Hauptcode zu überprüfen, um Null-Check/NPE-Code-Durcheinander zu vermeiden und zu versuchen, diese try/catch-Prüfung auf eine separate checkForNPE() -Methode zu verschieben. Wie kann ich viele solche Ausdrücke um den gleichen Ort (siehe mein Beispiel) und delegiere diesen Check-Code nur zu einem CheckForNPE() und für alle Ausdrücke wiederverwenden. – supernova