UtilitiesΒΆ

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 - The Open Source Java GIS Toolkit
 *    http://geotools.org
 *
 *    (C) 2019, Open Source Geospatial Foundation (OSGeo)
 *
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License as published by the Free Software Foundation;
 *    version 2.1 of the License.
 *
 *    This library is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *    Lesser General Public License for more details.
 *
 */

package org.geotools.metadata;

import org.geotools.util.Utilities;

public class Example {

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

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

        return result;
    }

    @Override
    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);
    }

    @Override
    public String toString() {
        StringBuilder build = new StringBuilder();
        build.append("Example[");
        if (field1 != null) {
            build.append(" field1=");
            build.append(field1);
        }
        build.append(" field2=");
        build.append(field2);
        if (array != null) {
            build.append(" array=");
            build.append(Utilities.deepToString(array));
        }
        build.append("]");
        return build.toString();
    }
}