package com.github.czyzby.kiwi.util.common; /** Provides static utilities for nullable objects to avoid NullPointerExceptions. Java 6 compatible. * * @author MJ */ public class Nullables extends UtilitiesClass { /** "null", matches StringBuilder behavior. */ public static final String DEFAULT_NULL_STRING = "null"; private Nullables() { } /** @param nullable if is null, {@link NullPointerException} is thrown. * @throws NullPointerException when passed parameter is null. */ public static void requireNotNull(final Object nullable) throws NullPointerException { if (nullable == null) { throw new NullPointerException(); } } /** @param nullable can be null. * @return true is passed object is null. */ public static boolean isNull(final Object nullable) { return nullable == null; } /** A simple not-null-check. */ public static boolean isNotNull(final Object nullable) { return nullable != null; } /** @param nullable probable null. * @param alternative will be return if nullable is null. */ public static <Type> Type getOrElse(final Type nullable, final Type alternative) { return nullable == null ? alternative : nullable; } /** @return true if objects are equal (using equals method) or if both are null. */ public static boolean areEqual(final Object first, final Object second) { return first == second || first != null && first.equals(second); } /** @return true if objects are not equal (using equals method) or one of them is null and the other is not. */ public static boolean areNotEqual(final Object first, final Object second) { if (first == null) { return second != null; } return !first.equals(second); } /** @param nullables nullable objects. * @return true if any of the objects is null. */ public static boolean isAnyNull(final Object... nullables) { for (final Object object : nullables) { if (object == null) { return true; } } return false; } /** @param nullables nullable objects. * @return true if all passed objects are null. */ public static boolean areAllNull(final Object... nullables) { for (final Object object : nullables) { if (object != null) { return false; } } return true; } /** @param nullables nullable objects. * @return true if any of the objects is not null. */ public static boolean isAnyNotNull(final Object... nullables) { for (final Object object : nullables) { if (object != null) { return true; } } return false; } /** @param nullables nullable objects. * @return true if all passed objects are not null. */ public static boolean areAllNotNull(final Object... nullables) { for (final Object object : nullables) { if (object == null) { return false; } } return true; } /** @return nullable object converted to string. If parameter is null, "null" string is returned. As long as * toString is properly implemented in the object, this method never returns null. */ public static String toString(final Object nullable) { return nullable == null ? DEFAULT_NULL_STRING : nullable.toString(); } /** @return nullable object converted to string. If first parameter is null, onNull parameter is returned. */ public static String toString(final Object nullable, final String onNull) { return nullable == null ? onNull : nullable.toString(); } /** @param nullable might be null. * @return nullable object converted to string. If nullable was null, null is returned. */ public static String toNullableString(final Object nullable) { return toString(nullable, null); } }