The Utilities class is interesting, in that it contains helper methods used when implementing basic Java functionality such as equals or hashcode.

  • It is fairly annoying to compare if two objects are equal, when either of the objects could be null.

  • It is also annoying to sort out how to compare or print an array

Here is what Utilities offers:

        // equals provides a null safe equals check
        Utilities.equals(string1, string2); // null safe equals check
        Utilities.equals(null, "Hello"); // false
        Utilities.equals(null, null); // true!

        // deepEquals will check the contents of arrays
        Utilities.deepEquals(new double[] {1.0}, new double[] {1.0});

        // deepToString will print out objects and arrays
        Utilities.deepToString(new double[] {1.0, Math.PI, Math.E});

        // when implementing your own object the following are handy
        Utilities.hash(value, seed);
        Utilities.equals(value, object);
        Utilities.ensureNonNull("parameter", object);

Several of the other methods are useful when you are implementing your own Object.

Here is an example:

 *    GeoTools Sample code and Tutorials by Open Source Geospatial Foundation, and others
 *    https://docs.geotools.org
 *    To the extent possible under law, the author(s) have dedicated all copyright
 *    and related and neighboring rights to this software to the public domain worldwide.
 *    This software is distributed without any warranty.
 *    You should have received a copy of the CC0 Public Domain Dedication along with this
 *    software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
package org.geotools.metadata;

import org.geotools.util.Utilities;

public class Example {

    private Object field1;
    private int field2;
    private double[] array;

    public int hashCode() {
        int result = 1;
        result = Utilities.hash(field1, result);
        result = Utilities.hash(field2, result);
        result = Utilities.hash(array, result);

        return result;

    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        if (obj == null) {
            return false;
        if (!(obj instanceof Example)) {
            return false;
        Example other = (Example) obj;
        return Utilities.equals(field1, other.field1)
                && Utilities.equals(field2, other.field2)
                && Utilities.deepEquals(array, other.array);

    public String toString() {
        StringBuilder build = new StringBuilder();
        if (field1 != null) {
            build.append(" field1=");
        build.append(" field2=");
        if (array != null) {
            build.append(" array=");
        return build.toString();