在java生态中有着众多的工具类,而有的工具类是我们常用而且如果用的好,会极大提高代码的优雅性与效率的,同时也能避免重复的造轮子。接下来我们一起了解一下这些工具类。
Objects
Objects是jdk官方自带的工具类,首先我们来看看Objects的官方简介:
This class consists of static utility methods for operating on objects. These utilities include null-safe or null-tolerant methods for computing the hash code of an object, returning a string for an object, and comparing two objects.Since: 1.7
这是一个私有的工具类,用来提供一些对Object的操作方法,包括null值的安全操作,一级hash值的计算等实用方法。jdk1.7 就提供了。
Objects的提供的静态方法如下:
equals
用来比较两个对象的是否相等,null安全的,可以替换繁琐的判空校验。实现逻辑:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
deepEquals
数组的深度比较,同样null安全的。实现逻辑:
public static boolean deepEquals(Object a, Object b) {
if (a == b)
return true;
else if (a == null || b == null)
return false;
else
return Arrays.deepEquals0(a, b);
}
hashCode
获取一个对象的hashCode,同样null安全的。实现逻辑:
public static int hashCode(Object o) {
return o != null ? o.hashCode() : 0;
}
hash
对一个数组求hash值,同样null安全的。实现逻辑:
public static int hash(Object... values) {
return Arrays.hashCode(values);
}
toString
调用对象o的toString方法,同样null安全的。不过这里要注意一下,如果是null的话,会返回null字符串。
相对应的,还有一个重载方法,toString(Object o, String nullDefault) 。 能够自定义null值的返回值,这个挺实用的。
实现逻辑:
public static String toString(Object o) {
return String.valueOf(o);
}
# String.valueOf 实现
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
public static String toString(Object o, String nullDefault) {
return (o != null) ? o.toString() : nullDefault;
}
compare
自定义实现大小比较逻辑,同样null安全的。实现逻辑:
public static <T> int compare(T a, T b, Comparator<? super T> c) {
return (a == b) ? 0 : c.compare(a, b);
}
isNull
判断对象是null, 可以用来替换 obj==null 的写法,更优雅。 实现逻辑:
public static boolean isNull(Object obj) {
return obj == null;
}
nonNull
判断对象非null, 可以用来替换 obj!=null 的写法,更优雅。 实现逻辑:
public static boolean nonNull(Object obj) {
return obj != null;
}
requireNonNull
断言判断,要求一个对象是非空的。如果为空则抛出异常,有三个重载方法,可以自定义不同的异常message。
实现逻辑:
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
public static <T> T requireNonNull(T obj, String message) {
if (obj == null)
throw new NullPointerException(message);
return obj;
}
public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) {
if (obj == null)
throw new NullPointerException(messageSupplier.get());
return obj;
}
好了,jdk自动的Objects方法就介绍这些,有时间 我们再聊聊其他的常用工具类。
文档信息
- 本文作者:寒澈
- 本文链接:https://www.hancher.top/2022/08/19/java_utils_1_Objects/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)