package utils.okhttp.utils;

import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Map;

public final class Objects {
    /**
     * 判断对象是否为 {@code null}
     *
     * @param obj 待检查的对象
     */
    public static boolean isNull(Object obj) {
        return obj == null;
    }

    /**
     * 判断对象是否不为 {@code null}
     *
     * @param obj 待检查的对象
     */
    public static boolean nonNull(Object obj) {
        return obj != null;
    }

    /**
     * 检查一个对象是否是空，满足以下条件将返回 {@code true}
     * <br/> 当 待检查的对象为 {@code null}
     * <br/> 当 {@link Number} 值为 0
     * <br/> 当 {@link CharSequence} 长度为 0
     * <br/> 当 {@link Collection} 为空
     * <br/> 当 {@link Map} 为空
     * <br/> 当 数组 长度为 0
     *
     * @param object 待检查的对象
     */
    public static boolean isEmpty(Object object) {
        if (isNull(object))
            return true;
        if (object instanceof CharSequence)
            return 0 == ((CharSequence) object).length();
        if (object instanceof Number)
            return 0 == ((Number) object).doubleValue();
        if (object instanceof Collection)
            return ((Collection) object).isEmpty();
        if (object instanceof Map)
            return ((Map) object).isEmpty();
        return object.getClass().isArray() && 0 == Array.getLength(object);
    }

    /**
     * 获取一个对象，如果待检查的对象为 {@code null} 则返回默认值
     *
     * @param obj          待检查的对象
     * @param defaultValue 默认值
     */
    public static <T> T getDefinedObject(T obj, T defaultValue) {
        return nonNull(obj) ? obj : defaultValue;
    }

    /**
     * 检查一个对象是否为 {@code null}，如果为 {@code null}，
     * 则抛出 {@link NullPointerException}，否则返回此对象
     *
     * @param obj 待检查的对象
     */
    public static <T> T requireNonNull(T obj) {
        if (isNull(obj))
            throw new NullPointerException();
        return obj;
    }

    /**
     * 检查一个对象是否为 {@code null}，如果为 {@code null}，
     * 则抛出带消息的 {@link NullPointerException}，否则返回此对象
     *
     * @param obj 待检查的对象
     */
    public static <T> T requireNonNull(T obj, String message) {
        if (isNull(obj))
            throw new NullPointerException(message);
        return obj;
    }

    /**
     * 检查一个对象是否为空，如果为空，则抛出带消息的 {@link IllegalArgumentException}，否则返回此对象
     *
     * @param obj 待检查的对象
     */
    public static <T> T requireNonEmpty(T obj, String message) {
        if (isEmpty(obj))
            throw new IllegalArgumentException(message);
        return obj;
    }

    /**
     * 检查一个对象是否为空，如果为空，则抛出 {@link NullPointerException}，否则返回此对象
     *
     * @param obj 待检查的对象
     */
    public static <T> T requireNonEmpty(T obj) {
        if (isEmpty(obj))
            throw new IllegalArgumentException();
        return obj;
    }
}

@@ -1766,89 +1766,40 @@
     
-if (isNull(obj))%0A            throw new NullPointerException();%0A        return obj
+return requireNonNull(obj, null)
 ;%0A  
@@ -2112,32 +2112,243 @@
 urn obj;%0A    %7D%0A%0A
+    /**%0A     * %E6%A3%80%E6%9F%A5%E4%B8%80%E4%B8%AA%E5%AF%B9%E8%B1%A1%E6%98%AF%E5%90%A6%E4%B8%BA%E7%A9%BA%EF%BC%8C%E5%A6%82%E6%9E%9C%E4%B8%BA%E7%A9%BA%EF%BC%8C%E5%88%99%E6%8A%9B%E5%87%BA %7B@link NullPointerException%7D%EF%BC%8C%E5%90%A6%E5%88%99%E8%BF%94%E5%9B%9E%E6%AD%A4%E5%AF%B9%E8%B1%A1%0A     *%0A     * @param obj %E5%BE%85%E6%A3%80%E6%9F%A5%E7%9A%84%E5%AF%B9%E8%B1%A1%0A     */%0A    public static %3CT%3E T requireNonEmpty(T obj) %7B%0A        return requireNonEmpty(obj, null);%0A    %7D%0A%0A
     /**%0A     * %E6%A3%80
@@ -2628,271 +2628,7 @@
    %7D
-%0A%0A    /**%0A     * %E6%A3%80%E6%9F%A5%E4%B8%80%E4%B8%AA%E5%AF%B9%E8%B1%A1%E6%98%AF%E5%90%A6%E4%B8%BA%E7%A9%BA%EF%BC%8C%E5%A6%82%E6%9E%9C%E4%B8%BA%E7%A9%BA%EF%BC%8C%E5%88%99%E6%8A%9B%E5%87%BA %7B@link NullPointerException%7D%EF%BC%8C%E5%90%A6%E5%88%99%E8%BF%94%E5%9B%9E%E6%AD%A4%E5%AF%B9%E8%B1%A1%0A     *%0A     * @param obj %E5%BE%85%E6%A3%80%E6%9F%A5%E7%9A%84%E5%AF%B9%E8%B1%A1%0A     */%0A    public static %3CT%3E T requireNonEmpty(T obj) %7B%0A        if (isEmpty(obj))%0A            throw new IllegalArgumentException();%0A        return obj;%0A    %7D
 %0A%7D%0A

refine Objects