19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.internal.util; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkeyimport java.util.Arrays; 20d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Object utility methods. 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Objects { 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 27d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * Determines whether two possibly-null objects are equal. Returns: 28d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * 29d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * <ul> 30d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * <li>{@code true} if {@code a} and {@code b} are both null. 31d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * <li>{@code true} if {@code a} and {@code b} are both non-null and they are 32d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * equal according to {@link Object#equals(Object)}. 33d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * <li>{@code false} in all other situations. 34d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * </ul> 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 36d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * <p>This assumes that any non-null objects passed to this function conform 37d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * to the {@code equals()} contract. 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 39d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey public static boolean equal(Object a, Object b) { 40d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey return a == b || (a != null && a.equals(b)); 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 44d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * Generates a hash code for multiple values. The hash code is generated by 45d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * calling {@link Arrays#hashCode(Object[])}. 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 47d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * <p>This is useful for implementing {@link Object#hashCode()}. For example, 48d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * in an object that has three properties, {@code x}, {@code y}, and 49d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * {@code z}, one could write: 50d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * <pre> 51d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * public int hashCode() { 52d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * return Objects.hashCode(getX(), getY(), getZ()); 53d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * }</pre> 54d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * 55d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * <b>Warning</b>: When a single object is supplied, the returned hash code 56d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey * does not equal the hash code of that object. 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 58d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey public static int hashCode(Object... objects) { 59d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey return Arrays.hashCode(objects); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 61d2a458750e5a3d490af09cecb5c28370baf0a913Jeff Sharkey 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 63