Lately I have come across Null Object design pattern and my colleagues say it can be used to do away with the null pointer checks that are encountered throughout the code.
for e.g suppose a DAO class returns information on Customer (in a value object called CustomerVO). My main class is supposed to extract the firstName and emailId and send email to customer.
...
CustomerVO custVO = CustomerDAO.getCustomer(customerID);
if(custVO != null) { // imp, otherwise we may get null ptr exception in next line
sendEmail(custVO.getFirstName(), custVO.getEmailID());
}
...
This is very simple example, but such null checks can quickly spread throughout your code based on the complexity of the value objects.
I have two issues with null check, - they tend tmake the code ugly and hard to read - lesser experienced developers put unnecessary null checks when in fact they are supposed to throw exceptions. for e.g. in above code, it would be better to throw exception from getCustomer() itself because if its not able to find customer info for given CustID, it indicates the CustID was invalid.
okay, coming back to null object pattern, can we use a 'null' CustomerVO object to hide the null check?
CustomerVO {
String firstName = "";
String emailID = "";
}
Don't it would make sense. what do you think?
And what are the things you follow to minimize null checks in your app.
In this case a null object may be inappropriate since the default may infact hide what is in actuality an exception. If you find yourself having to check to see if your have safe null to perform some other activity the null pattern isn't buying you anything.
As you stated many new developers spend time trying to protect their code from exception situations that are worse then a halting program.