All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.moon.core.lang.ObjectUtil Maven / Gradle / Ivy

package com.moon.core.lang;

import com.moon.core.lang.invoke.LambdaUtil;
import com.moon.core.util.function.SerializableFunction;

import java.util.Objects;
import java.util.function.Function;

import static com.moon.core.lang.ThrowUtil.noInstanceError;

/**
 * @author moonsky
 */
public final class ObjectUtil {

    private final static String NULL = null;

    private ObjectUtil() { noInstanceError(); }

    public static  T defaultIfNull(T obj, T defaultValue) { return obj == null ? defaultValue : obj; }

    public static boolean equals(Object o1, Object o2) { return Objects.equals(o1, o2); }

    public static  boolean equalsProperties(T o1, T o2, Function... propertiesGetter) {
        if (o1 == o2) {
            return true;
        }
        if (o1 == null || o2 == null) {
            return false;
        }
        int length = propertiesGetter == null ? 0 : propertiesGetter.length;
        if (length > 0) {
            for (Function getter : propertiesGetter) {
                if (!Objects.equals(getter.apply(o1), getter.apply(o2))) {
                    return false;
                }
            }
            return true;
        }
        throw new IllegalStateException("没有任何可比较的属性");
    }

    public static  String toString(T object, SerializableFunction... getters) {
        if (object == null) {
            return "null";
        }
        StringBuilder builder = new StringBuilder(getters.length * 16);
        builder.append(object.getClass().getSimpleName()).append("{");
        for (SerializableFunction getter : getters) {
            Object value = getter.apply(object);
            builder.append(LambdaUtil.getPropertyName(getter)).append("=");
            if (value instanceof CharSequence) {
                builder.append("'").append(value).append('\'');
            } else if (value instanceof Number || value instanceof Boolean) {
                builder.append(value);
            } else if (value == null) {
                builder.append(NULL);
            } else {
                builder.append("{").append(value).append('}');
            }
            builder.append(", ");
        }
        int length = builder.length();
        return builder.delete(length - 2, length).append("}").toString();
    }

    @SafeVarargs
    public static  String toStringAsJson(T object, SerializableFunction... getters) {
        if (object == null) {
            return "null";
        }
        StringBuilder builder = new StringBuilder(getters.length * 16);
        builder.append("{\"@type\":\"").append(object.getClass().getName()).append("\",");
        for (SerializableFunction getter : getters) {
            Object value = getter.apply(object);
            builder.append('"').append(LambdaUtil.getPropertyName(getter)).append("\":");
            if (value instanceof CharSequence) {
                builder.append('"').append(value).append('"');
            } else if (value instanceof Number || value instanceof Boolean) {
                builder.append(value);
            } else if (value == null) {
                builder.append(NULL);
            } else if (value instanceof Iterable) {
                Iterable iterable = (Iterable) value;
                for (Object o : iterable) {
                    builder.append(o).append(',');
                }
                builder.deleteCharAt(builder.length() - 1);
            } else {
                builder.append(value);
            }
            builder.append(",");
        }
        int length = builder.length();
        return builder.deleteCharAt(length - 1).append("}}").toString();
    }

    public static boolean contentEquals(ContentEquals a, ContentEquals b) {
        return (a == b) || (a != null && a.contentEquals(b));
    }

    public static  T getInitializeValue(Class type) {
        if (type == null) { return null; }
        if (type.isPrimitive()) {
            if (type == int.class) { return (T) Integer.valueOf(0); }
            if (type == long.class) { return (T) Long.valueOf(0); }
            if (type == double.class) { return (T) Double.valueOf(0); }
            if (type == boolean.class) { return (T) Boolean.FALSE; }
            if (type == byte.class) { return (T) Byte.valueOf((byte) 0); }
            if (type == short.class) { return (T) Short.valueOf((short) 0); }
            if (type == float.class) { return (T) Float.valueOf(0); }
            if (type == char.class) { return (T) Character.valueOf(' '); }
        }
        return null;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy