Class Java

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import java.io.Serializable;
/**
 * 

Operations on Object.


 * 
 * 

This class tries to handle null input gracefully.
 * An exception will generally not be thrown for a null input.
 * Each method documents its behaviour in more detail.


 *
 * @author Nissim Karpenstein
 * @author Janek Bogucki
 * @author Daniel L. Rall
 * @author Stephen Colebourne
 * @author Gary Gregory
 * @author Mario Winterer
 * @author David J. M. Karlsen
 * @since 1.0
 * @version $Id: ObjectUtils.java 594336 2007-11-12 22:54:02Z bayard $
 */
public class ObjectUtils {
    /**
     * 

Singleton used as a null placeholder where
     * null has another meaning.


     *
     * 

For example, in a HashMap the
     * {@link java.util.HashMap#get(java.lang.Object)} method returns
     * null if the Map contains
     * null or if there is no matching key. The
     * Null placeholder can be used to distinguish between
     * these two cases.


     *
     * 

Another example is Hashtable, where null
     * cannot be stored.


     *
     * 

This instance is Serializable.


     */
    public static final Null NULL = new Null();
    
    /**
     * 

ObjectUtils instances should NOT be constructed in
     * standard programming. Instead, the class should be used as
     * ObjectUtils.defaultIfNull("a","b");.


     *
     * 

This constructor is public to permit tools that require a JavaBean instance
     * to operate.


     */
    public ObjectUtils() {
        super();
    }
    // Defaulting
    //-----------------------------------------------------------------------
    /**
     * 

Returns a default value if the object passed is
     * null.


     * 
     * 

     * ObjectUtils.defaultIfNull(null, null)      = null
     * ObjectUtils.defaultIfNull(null, "")        = ""
     * ObjectUtils.defaultIfNull(null, "zz")      = "zz"
     * ObjectUtils.defaultIfNull("abc", *)        = "abc"
     * ObjectUtils.defaultIfNull(Boolean.TRUE, *) = Boolean.TRUE
     * 

     *
     * @param object  the Object to test, may be null
     * @param defaultValue  the default value to return, may be null
     * @return object if it is not null, defaultValue otherwise
     */
    public static Object defaultIfNull(Object object, Object defaultValue) {
        return object != null ? object : defaultValue;
    }
    /**
     * 

Compares two objects for equality, where either one or both
     * objects may be null.


     *
     * 

     * ObjectUtils.equals(null, null)                  = true
     * ObjectUtils.equals(null, "")                    = false
     * ObjectUtils.equals("", null)                    = false
     * ObjectUtils.equals("", "")                      = true
     * ObjectUtils.equals(Boolean.TRUE, null)          = false
     * ObjectUtils.equals(Boolean.TRUE, "true")        = false
     * ObjectUtils.equals(Boolean.TRUE, Boolean.TRUE)  = true
     * ObjectUtils.equals(Boolean.TRUE, Boolean.FALSE) = false
     * 

     *
     * @param object1  the first object, may be null
     * @param object2  the second object, may be null
     * @return true if the values of both objects are the same
     */
    public static boolean equals(Object object1, Object object2) {
        if (object1 == object2) {
            return true;
        }
        if ((object1 == null) || (object2 == null)) {
            return false;
        }
        return object1.equals(object2);
    }
    /**
     * 

Gets the hash code of an object returning zero when the
     * object is null.


     *
     * 

     * ObjectUtils.hashCode(null)   = 0
     * ObjectUtils.hashCode(obj)    = obj.hashCode()
     * 

     *
     * @param obj  the object to obtain the hash code of, may be null
     * @return the hash code of the object, or zero if null
     * @since 2.1
     */
    public static int hashCode(Object obj) {
        return (obj == null) ? 0 : obj.hashCode();
    }
    // Identity ToString
    //-----------------------------------------------------------------------
    /**
     * 

Gets the toString that would be produced by Object
     * if a class did not override toString itself. null
     * will return null.


     *
     * 

     * ObjectUtils.identityToString(null)         = null
     * ObjectUtils.identityToString("")           = "java.lang.String@1e23"
     * ObjectUtils.identityToString(Boolean.TRUE) = "java.lang.Boolean@7fa"
     * 

     *
     * @param object  the object to create a toString for, may be
     *  null
     * @return the default toString text, or null if
     *  null passed in
     */
    public static String identityToString(Object object) {
        if (object == null) {
            return null;
        }
        StringBuffer buffer = new StringBuffer();
        identityToString(buffer, object);
        return buffer.toString();
    }
    /**
     * 

Appends the toString that would be produced by Object
     * if a class did not override toString itself. null
     * will throw a NullPointerException for either of the two parameters. 


     *
     * 

     * ObjectUtils.identityToString(buf, "")            = buf.append("java.lang.String@1e23"
     * ObjectUtils.identityToString(buf, Boolean.TRUE)  = buf.append("java.lang.Boolean@7fa"
     * ObjectUtils.identityToString(buf, Boolean.TRUE)  = buf.append("java.lang.Boolean@7fa")
     * 

     *
     * @param buffer  the buffer to append to
     * @param object  the object to create a toString for
     * @since 2.4
     */
    public static void identityToString(StringBuffer buffer, Object object) {
        if (object == null) {
            throw new NullPointerException("Cannot get the toString of a null identity");
        }
        buffer.append(object.getClass().getName())
              .append('@')
              .append(Integer.toHexString(System.identityHashCode(object)));
    }
    // ToString
    //-----------------------------------------------------------------------
    /**
     * 

Gets the toString of an Object returning
     * an empty string ("") if null input.


     * 
     * 

     * ObjectUtils.toString(null)         = ""
     * ObjectUtils.toString("")           = ""
     * ObjectUtils.toString("bat")        = "bat"
     * ObjectUtils.toString(Boolean.TRUE) = "true"
     * 

     * 
     * @see StringUtils#defaultString(String)
     * @see String#valueOf(Object)
     * @param obj  the Object to toString, may be null
     * @return the passed in Object's toString, or nullStr if null input
     * @since 2.0
     */
    public static String toString(Object obj) {
        return obj == null ? "" : obj.toString();
    }
    /**
     * 

Gets the toString of an Object returning
     * a specified text if null input.


     * 
     * 

     * ObjectUtils.toString(null, null)           = null
     * ObjectUtils.toString(null, "null")         = "null"
     * ObjectUtils.toString("", "null")           = ""
     * ObjectUtils.toString("bat", "null")        = "bat"
     * ObjectUtils.toString(Boolean.TRUE, "null") = "true"
     * 

     * 
     * @see StringUtils#defaultString(String,String)
     * @see String#valueOf(Object)
     * @param obj  the Object to toString, may be null
     * @param nullStr  the String to return if null input, may be null
     * @return the passed in Object's toString, or nullStr if null input
     * @since 2.0
     */
    public static String toString(Object obj, String nullStr) {
        return obj == null ? nullStr : obj.toString();
    }
    // Null
    //-----------------------------------------------------------------------
    /**
     * 

Class used as a null placeholder where null
     * has another meaning.


     *
     * 

For example, in a HashMap the
     * {@link java.util.HashMap#get(java.lang.Object)} method returns
     * null if the Map contains
     * null or if there is no matching key. The
     * Null placeholder can be used to distinguish between
     * these two cases.


     *
     * 

Another example is Hashtable, where null
     * cannot be stored.


     */
    public static class Null implements Serializable {
        /**
         * Required for serialization support. Declare serialization compatibility with Commons Lang 1.0
         * 
         * @see java.io.Serializable
         */
        private static final long serialVersionUID = 7092611880189329093L;
        
        /**
         * Restricted constructor - singleton.
         */
        Null() {
            super();
        }
        
        /**
         * 

Ensure singleton.


         * 
         * @return the singleton value
         */
        private Object readResolve() {
            return ObjectUtils.NULL;
        }
    }
}