package com.tudicloud.framework.common.core.util.core;
import java.util.StringJoiner;
/**
* 工具类,提供对对象进行判断、转换等通用操作的方法。
*
* @Author 孙达
* @Date 2025/11/14 14:09
* @Wechat sundaain
* @Email 18211102099@163.com
* @Copyright <a href="https://www.sundablog.com">孙达博客</a>
*/
public class ObjectUtils {
// ---------------------- judge ----------------------
/**
* 判断两个可能为 null 的对象是否相等。
*
* 返回值规则如下:
* <ul>
* <li>如果 a 和 b 都是 null,则返回 true。</li>
* <li>如果 a 和 b 都不为 null,并且通过 {@link Object#equals(Object)} 相等,则返回 true。</li>
* <li>其他情况均返回 false。</li>
* </ul>
*
* @param a 第一个比较的对象
* @param b 第二个比较的对象
* @return 如果两个对象相等则返回 true,否则返回 false
*/
public static boolean equal(Object a, Object b) {
return a == b || (a != null && a.equals(b));
}
/**
* 判断给定对象是否是一个数组类型。
*
* @param obj 待检测的对象(可以为 null)
* @return 如果对象是非空并且是数组类型则返回 true,否则返回 false
*/
public static boolean isArray(Object obj) {
return (obj != null && obj.getClass().isArray());
}
/**
* 判断给定的数组是否为空。
*
* @param array 要检查的数组
* @return 如果数组为 null 或长度为 0 则返回 true,否则返回 false
*/
public static boolean isEmpty(Object[] array) {
return (array == null || array.length == 0);
}
// ---------------------- operate ----------------------
private static final String EMPTY_STRING = "";
private static final String NULL_STRING = "null";
private static final String ARRAY_START = "{";
private static final String ARRAY_END = "}";
private static final String EMPTY_ARRAY = ARRAY_START + ARRAY_END;
private static final String ARRAY_ELEMENT_SEPARATOR = ", ";
/**
* 将指定对象转为其字符串表示形式。
*
* 处理逻辑包括:
* - 若对象为 null,返回 "null" 字符串;
* - 若对象是 String 类型,直接返回该字符串;
* - 若对象是各种基本类型的数组,调用对应的重载方法处理;
* - 其他情况下使用其 toString() 方法并做安全校验。
*
* @param obj 要构建字符串的对象
* @return 对象的字符串表示;若对象为 null 则返回 "null"
*/
public static String toString(Object obj) {
if (obj == null) {
return NULL_STRING;
}
if (obj instanceof String) {
return (String) obj;
}
if (obj instanceof Object[]) {
return toString((Object[]) obj);
}
if (obj instanceof boolean[]) {
return toString((boolean[]) obj);
}
if (obj instanceof byte[]) {
return toString((byte[]) obj);
}
if (obj instanceof char[]) {
return toString((char[]) obj);
}
if (obj instanceof double[]) {
return toString((double[]) obj);
}
if (obj instanceof float[]) {
return toString((float[]) obj);
}
if (obj instanceof int[]) {
return toString((int[]) obj);
}
if (obj instanceof long[]) {
return toString((long[]) obj);
}
if (obj instanceof short[]) {
return toString((short[]) obj);
}
String str = obj.toString();
return (str != null ? str : EMPTY_STRING);
}
/**
* 将指定数组的内容转换成字符串表示形式。
*
* 格式示例:{元素1, 元素2, ...}。对于空数组返回 "{}"。
*
* @param array 要构建字符串的数组
* @return 数组内容的字符串表示
*/
public static String toString(Object[] array) {
if (array == null) {
return NULL_STRING;
}
int length = array.length;
if (length == 0) {
return EMPTY_ARRAY;
}
StringJoiner stringJoiner = new StringJoiner(ARRAY_ELEMENT_SEPARATOR, ARRAY_START, ARRAY_END);
for (Object o : array) {
stringJoiner.add(String.valueOf(o));
}
return stringJoiner.toString();
}
/**
* 获取指定对象的身份标识字符串。
*
* 形如:"com.example.MyClass@abcd1234"
*
* @param obj 要获取身份信息的对象
* @return 对象的身份标识字符串;若对象为 null 则返回空字符串
*/
public static String identityToString(Object obj) {
if (obj == null) {
return EMPTY_STRING;
}
return obj.getClass().getName() + "@" + getIdentityHexString(obj);
}
/**
* 获取对象的身份哈希码的十六进制字符串表示。
*
* @param obj 指定对象
* @return 对象身份哈希码的十六进制字符串
*/
public static String getIdentityHexString(Object obj) {
return Integer.toHexString(System.identityHashCode(obj));
}
// ---------------------- other ----------------------
}
最后修改:2025 年 11 月 14 日
© 允许规范转载