Hello.

After recent discussions on the list, the following methods will be included in round two of the evolution of java.util.Objects:

Under bug 6889858: Add nonNull methods to java.util.Objects:

 /**
    * 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);

   /**
    * 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);

Under bug 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
   /**
    * Returns {...@code true} if the arguments are deeply equal to each other
    * and {...@code false} otherwise.
    *
    * Two {...@code null} values are deeply equal.  If both arguments are
    * arrays, the algorithm in {...@link Arrays.deepEquals(Object[],
    * Object[]) Arrays.deepEquals) is used to determine equality.
    * Otherwise, equality is determined by using the {...@link Object#equals
    * equals} method of the first argument.
    *
    * @return {...@code true} if the arguments are deeply equal to each other
    * and {...@code false} otherwise
    * @see Arrays#deepEquals(Object[], Object[])
    * @see Objects#equals(Object, Object)
    */
   public static deepEquals(Object a, Object b);
/**
    * Returns the result of calling {...@code toString} on the first
    * argument if the first argument is not {...@code null} and returns
    * the second argument otherwise.
    *
    * @return the result of calling {...@code toString} on the first
    * argument if it is not {...@code null} and the second argument
    * otherwise.
    * @see Objects#toString(Object)
    */
   public static toString(Object a, String nullDefault);

   /**
* Generates a hash code for a sequence of input values. The hash code is * generated as if all the input values were placed into an array, and that
    * array were hashed by calling {...@link Arrays#hashCode(Object[])}.
    *
* <p>This method is useful for implementing {...@link Object#hashCode()} on * objects containing multiple fields. For example, if an object that has
    * three  fields, {...@code x}, {...@code y}, and {...@code z}, one could 
write:
    * <pre>
    * &#064;Override public int hashCode() {
    *     return Objects.hashCode(x, y, z);
    * }
    * </pre>
    * <b>Warning: When a single object reference is supplied, the returned
    * value does not equal the hash code of that object reference.</b> This
    * value can be computed by calling {...@link #hashCode(Object)}.
    *
    * @return a hash value of the sequence of input values
    * @see Arrays#hashCode
    */
   public static int hash(Object... components);

In addition, the Objects class will be explicitly marked as "final" to indicate its already implicit status as a non-instantiable, non-extendable class.

I've closed as "will not fix" the bug requesting to var-argify various constructors in String.

I'm open having being convinced that "toDefaultString(Object)" is a worthwhile addition to j.u.Objects as well.

Likewise, for "toDebugString(Object)", although someone else would have to specify, implement, and test that method.

-Joe

Reply via email to