All,
While I agree that the nonNull methods below are useful and should be in
the JDK, I question whether they should be on j.u.Objects.
I believe that there is a whole category of methods to pre-validate the
arguments of a method, such as Commons Lang Validate, or Google Prevalidate.
http://commons.apache.org/lang/apidocs/org/apache/commons/lang/Validate.html
http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/base/Preconditions.html
Adding such a set of validation methods would be a useful way to allow
developers to strengthen method input checking.
Stephen
Joshua Bloch wrote:
Joe,
Hi. I've attached a file containing the methods and a JTReg "basic
test" for inclusion in your BasicObjectTests. I adhered to your style,
for easy integration. If you could take it from here, I'd be ever so
grateful.
Thanks,
Josh
On Thu, Oct 8, 2009 at 6:21 PM, Joe Darcy <joe.da...@sun.com
<mailto:joe.da...@sun.com>> wrote:
I strongly suggest that you do add these two methods:
/**
* Checks that the specified object reference is not {...@code
null}. This
* method is designed primarily for doing parameter
validation in methods
* and constructors, as demonstrated below:
* <pre>
* public Foo(Bar bar) {
* this.bar = Objects.nonNull(bar);
* }
* </pre>
*
* @param obj the object reference to check for nullity
* @return {...@code obj} if not {...@code null}
* @throws NullPointerException if {...@code obj} is {...@code null}
*/
public static <T> T nonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
/**
* Checks that the specified object reference is not {...@code
null} and
* throws a customized {...@link NullPointerException} if it is.
This method
* is designed primarily for doing parameter validation in
methods and
* constructors with multiple parameters, as demonstrated below:
* <pre>
* public Foo(Bar bar, Baz baz) {
* this.bar = Objects.nonNull(bar, "bar must not be null");
* this.baz = Objects.nonNull(baz, "baz must not be null");
* }
* </pre>
*
* @param obj the object reference to check for nullity
* @param message detail message to be used in the event that
a {...@code
* NullPointerException} is thrown
* @return {...@code obj} if not {...@code null}
* @throws NullPointerException if {...@code obj} is {...@code null}
*/
public static <T> T nonNull(T obj, String message) {
if (obj == null)
throw new NullPointerException(message);
return obj;
}
They do a great job reducing the verbiage in validity-checking
of arguments that must not be null.
I've filed bug 6889858 "Add nonNull methods to java.util.Objects" for
these last two methods. If you want to finish off the engineering
need for a changeset, some light tests, etc., I'll file the
Sun-internal paperwork for these.