Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Null Object Pattern to avoid Null checks?

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.

like image 705
Rohit Avatar asked Oct 17 '10 05:10

Rohit


People also ask

What is the purpose of null object design pattern?

The Null object pattern is a design pattern that simplifies the use of dependencies that can be undefined. This is achieved by using instances of a concrete class that implements a known interface, instead of null references.

What type of design pattern is a null object?

Null Object is a concrete collaborator class that acts as the collaborator for a client which needs one. The null behavior is not designed to be mixed into an object that needs some do nothing behavior.

How can you check the object is null or not without IF condition?

In order to check whether a Java object is Null or not, we can either use the isNull() method of the Objects class or comparison operator.


1 Answers

While the null object pattern has it's uses, you're still going to need to make a check here, otherwise you're going to try to sendEmail() to an email address that's the empty string (or you push the check into sendEmail(), which could just as easily check for null).

Where the null object pattern would be really helpful here is if the CustomerVO class implemented the sendEmail() method. then you could simply chain the calls together, since the contract of getCustomer() would ensure that a null reference wouldn't be returned:

CustomerDAO.getCustomer(customerID).sendEmail();

In that case the sendEmail() method would check that its been asked to act on the special 'null object' and simply do nothing (or whatever's appropriate).

like image 153
Michael Burr Avatar answered Sep 22 '22 01:09

Michael Burr