Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java api design - NULL or Exception

Tags:

java

api

Is it better to return a null value or throw an exception from an API method?

Returning a null requires ugly null checks all over, and cause a major quality problem if the return is not checked.

Throwing an exception forces the user to code for the faulty condition, but since Java exceptions bubble up and force the caller code to handle them, in general, using custom exceptions may be a bad idea (specifically in java).

Any sound and practical advice?

like image 725
srini.venigalla Avatar asked Feb 11 '10 16:02

srini.venigalla


3 Answers

Josh Bloch recommends returning empty objects or "unit" objects in place of null values. Check out Effective Java for a ton of useful Java tidbits.

like image 76
kgrad Avatar answered Nov 14 '22 03:11

kgrad


I think the answer is entirely dependent on the context of your application, and what you consider to be an "exceptional circumstance" versus programmer error.

For example, if writing an XML parser you may choose to implement methods like:

/**
 * Returns first child element with matching element name or else
 * throws an exception.  Will never return null.
 */
Element getMandatoryChildElement(Element parent, String elementName)
throws MissingElementException;

... as this approach allows you to implement your message parsing code in a single block of logic, without having to check that the message is well-formed after retrieving each element or attribute.

like image 26
Adamski Avatar answered Nov 14 '22 02:11

Adamski


If null is an acceptable return value (ie, it can result from valid inputs rather than an error case) then return null; otherwise throw an exception.

I don't at all understand your statement that a checked exception may be a bad idea because the caller is forced to handle them - this is the whole point of checked exceptions. It guards against error conditions propagating into the code without being handled properly.

like image 6
danben Avatar answered Nov 14 '22 03:11

danben