jdk/src/share/classes/java/util/Objects.java
author darcy
Fri, 19 Aug 2011 17:42:24 -0700
changeset 10350 6d009f117062
parent 9035 1255eb81cc2f
child 16863 f51406efb328
permissions -rw-r--r--
4748706: typos in java.util.Observable documentation Reviewed-by: iris
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4038
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
     1
/*
9035
1255eb81cc2f 7033660: Update copyright year to 2011 on any files changed in 2011
ohair
parents: 8166
diff changeset
     2
 * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
4038
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
     4
 *
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4504
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
4038
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4504
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
4038
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    10
 *
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    15
 * accompanied this code).
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    16
 *
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    20
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4504
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4504
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4504
diff changeset
    23
 * questions.
4038
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    24
 */
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    25
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    26
package java.util;
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    27
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    28
/**
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    29
 * This class consists of {@code static} utility methods for operating
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    30
 * on objects.  These utilities include {@code null}-safe or {@code
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    31
 * null}-tolerant methods for computing the hash code of an object,
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    32
 * returning a string for an object, and comparing two objects.
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    33
 *
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    34
 * @since 1.7
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    35
 */
4165
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    36
public final class Objects {
4038
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    37
    private Objects() {
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    38
        throw new AssertionError("No java.util.Objects instances for you!");
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    39
    }
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    40
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    41
    /**
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    42
     * Returns {@code true} if the arguments are equal to each other
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    43
     * and {@code false} otherwise.
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    44
     * Consequently, if both arguments are {@code null}, {@code true}
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    45
     * is returned and if exactly one argument is {@code null}, {@code
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    46
     * false} is returned.  Otherwise, equality is determined by using
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    47
     * the {@link Object#equals equals} method of the first
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    48
     * argument.
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    49
     *
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    50
     * @param a an object
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    51
     * @param b an object to be compared with {@code a} for equality
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    52
     * @return {@code true} if the arguments are equal to each other
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    53
     * and {@code false} otherwise
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    54
     * @see Object#equals(Object)
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    55
     */
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    56
    public static boolean equals(Object a, Object b) {
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    57
        return (a == b) || (a != null && a.equals(b));
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    58
    }
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    59
4165
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    60
   /**
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    61
    * Returns {@code true} if the arguments are deeply equal to each other
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    62
    * and {@code false} otherwise.
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    63
    *
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    64
    * Two {@code null} values are deeply equal.  If both arguments are
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    65
    * arrays, the algorithm in {@link Arrays#deepEquals(Object[],
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    66
    * Object[]) Arrays.deepEquals} is used to determine equality.
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    67
    * Otherwise, equality is determined by using the {@link
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    68
    * Object#equals equals} method of the first argument.
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    69
    *
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    70
    * @param a an object
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    71
    * @param b an object to be compared with {@code a} for deep equality
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    72
    * @return {@code true} if the arguments are deeply equal to each other
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    73
    * and {@code false} otherwise
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    74
    * @see Arrays#deepEquals(Object[], Object[])
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    75
    * @see Objects#equals(Object, Object)
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    76
    */
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    77
    public static boolean deepEquals(Object a, Object b) {
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    78
        if (a == b)
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    79
            return true;
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    80
        else if (a == null || b == null)
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    81
            return false;
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    82
        else
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    83
            return Arrays.deepEquals0(a, b);
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    84
    }
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    85
4038
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    86
    /**
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    87
     * Returns the hash code of a non-{@code null} argument and 0 for
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    88
     * a {@code null} argument.
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    89
     *
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    90
     * @param o an object
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    91
     * @return the hash code of a non-{@code null} argument and 0 for
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    92
     * a {@code null} argument
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    93
     * @see Object#hashCode
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    94
     */
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    95
    public static int hashCode(Object o) {
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    96
        return o != null ? o.hashCode() : 0;
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    97
    }
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
    98
4165
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
    99
   /**
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   100
    * Generates a hash code for a sequence of input values. The hash
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   101
    * code is generated as if all the input values were placed into an
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   102
    * array, and that array were hashed by calling {@link
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   103
    * Arrays#hashCode(Object[])}.
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   104
    *
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   105
    * <p>This method is useful for implementing {@link
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   106
    * Object#hashCode()} on objects containing multiple fields. For
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   107
    * example, if an object that has three fields, {@code x}, {@code
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   108
    * y}, and {@code z}, one could write:
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   109
    *
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   110
    * <blockquote><pre>
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   111
    * &#064;Override public int hashCode() {
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   112
    *     return Objects.hash(x, y, z);
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   113
    * }
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   114
    * </pre></blockquote>
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   115
    *
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   116
    * <b>Warning: When a single object reference is supplied, the returned
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   117
    * value does not equal the hash code of that object reference.</b> This
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   118
    * value can be computed by calling {@link #hashCode(Object)}.
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   119
    *
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   120
    * @param values the values to be hashed
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   121
    * @return a hash value of the sequence of input values
4504
0a031ee3f7a4 6909057: @see Arrays#hashCode missing particular method specification in j.u.Objects.hash
darcy
parents: 4165
diff changeset
   122
    * @see Arrays#hashCode(Object[])
4165
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   123
    * @see List#hashCode
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   124
    */
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   125
    public static int hash(Object... values) {
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   126
        return Arrays.hashCode(values);
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   127
    }
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   128
4038
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   129
    /**
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   130
     * Returns the result of calling {@code toString} for a non-{@code
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   131
     * null} argument and {@code "null"} for a {@code null} argument.
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   132
     *
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   133
     * @param o an object
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   134
     * @return the result of calling {@code toString} for a non-{@code
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   135
     * null} argument and {@code "null"} for a {@code null} argument
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   136
     * @see Object#toString
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   137
     * @see String#valueOf(Object)
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   138
     */
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   139
    public static String toString(Object o) {
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   140
        return String.valueOf(o);
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   141
    }
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   142
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   143
    /**
4165
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   144
     * Returns the result of calling {@code toString} on the first
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   145
     * argument if the first argument is not {@code null} and returns
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   146
     * the second argument otherwise.
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   147
     *
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   148
     * @param o an object
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   149
     * @param nullDefault string to return if the first argument is
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   150
     *        {@code null}
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   151
     * @return the result of calling {@code toString} on the first
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   152
     * argument if it is not {@code null} and the second argument
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   153
     * otherwise.
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   154
     * @see Objects#toString(Object)
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   155
     */
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   156
    public static String toString(Object o, String nullDefault) {
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   157
        return (o != null) ? o.toString() : nullDefault;
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   158
    }
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   159
7cd799c224da 6891113: More methods for java.util.Objects: deepEquals, hash, toString with default
darcy
parents: 4061
diff changeset
   160
    /**
4038
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   161
     * Returns 0 if the arguments are identical and {@code
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   162
     * c.compare(a, b)} otherwise.
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   163
     * Consequently, if both arguments are {@code null} 0
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   164
     * is returned.
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   165
     *
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   166
     * <p>Note that if one of the arguments is {@code null}, a {@code
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   167
     * NullPointerException} may or may not be thrown depending on
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   168
     * what ordering policy, if any, the {@link Comparator Comparator}
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   169
     * chooses to have for {@code null} values.
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   170
     *
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   171
     * @param <T> the type of the objects being compared
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   172
     * @param a an object
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   173
     * @param b an object to be compared with {@code a}
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   174
     * @param c the {@code Comparator} to compare the first two arguments
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   175
     * @return 0 if the arguments are identical and {@code
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   176
     * c.compare(a, b)} otherwise.
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   177
     * @see Comparable
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   178
     * @see Comparator
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   179
     */
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   180
    public static <T> int compare(T a, T b, Comparator<? super T> c) {
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   181
        return (a == b) ? 0 :  c.compare(a, b);
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   182
    }
4061
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   183
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   184
    /**
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   185
     * Checks that the specified object reference is not {@code null}. This
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   186
     * method is designed primarily for doing parameter validation in methods
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   187
     * and constructors, as demonstrated below:
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   188
     * <blockquote><pre>
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   189
     * public Foo(Bar bar) {
8166
13423c0952ad 7012540: java.util.Objects.nonNull() incorrectly named
briangoetz
parents: 5506
diff changeset
   190
     *     this.bar = Objects.requireNonNull(bar);
4061
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   191
     * }
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   192
     * </pre></blockquote>
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   193
     *
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   194
     * @param obj the object reference to check for nullity
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   195
     * @param <T> the type of the reference
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   196
     * @return {@code obj} if not {@code null}
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   197
     * @throws NullPointerException if {@code obj} is {@code null}
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   198
     */
8166
13423c0952ad 7012540: java.util.Objects.nonNull() incorrectly named
briangoetz
parents: 5506
diff changeset
   199
    public static <T> T requireNonNull(T obj) {
4061
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   200
        if (obj == null)
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   201
            throw new NullPointerException();
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   202
        return obj;
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   203
    }
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   204
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   205
    /**
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   206
     * Checks that the specified object reference is not {@code null} and
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   207
     * throws a customized {@link NullPointerException} if it is. This method
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   208
     * is designed primarily for doing parameter validation in methods and
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   209
     * constructors with multiple parameters, as demonstrated below:
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   210
     * <blockquote><pre>
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   211
     * public Foo(Bar bar, Baz baz) {
8166
13423c0952ad 7012540: java.util.Objects.nonNull() incorrectly named
briangoetz
parents: 5506
diff changeset
   212
     *     this.bar = Objects.requireNonNull(bar, "bar must not be null");
13423c0952ad 7012540: java.util.Objects.nonNull() incorrectly named
briangoetz
parents: 5506
diff changeset
   213
     *     this.baz = Objects.requireNonNull(baz, "baz must not be null");
4061
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   214
     * }
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   215
     * </pre></blockquote>
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   216
     *
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   217
     * @param obj     the object reference to check for nullity
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   218
     * @param message detail message to be used in the event that a {@code
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   219
     *                NullPointerException} is thrown
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   220
     * @param <T> the type of the reference
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   221
     * @return {@code obj} if not {@code null}
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   222
     * @throws NullPointerException if {@code obj} is {@code null}
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   223
     */
8166
13423c0952ad 7012540: java.util.Objects.nonNull() incorrectly named
briangoetz
parents: 5506
diff changeset
   224
    public static <T> T requireNonNull(T obj, String message) {
4061
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   225
        if (obj == null)
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   226
            throw new NullPointerException(message);
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   227
        return obj;
35a627ad2443 6889858: Add nonNull methods to java.util.Objects
darcy
parents: 4038
diff changeset
   228
    }
4038
ea7aa63169db 6797535: Add shared two argument static equals method to the platform
darcy
parents:
diff changeset
   229
}