java中常用的工具类(1) Objects

在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的提供的静态方法如下:
Objects的工具方法

equals

用来比较两个对象的是否相等,null安全的,可以替换繁琐的判空校验。实现逻辑:

1
2
3
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}

deepEquals

数组的深度比较,同样null安全的。实现逻辑:

1
2
3
4
5
6
7
8
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安全的。实现逻辑:

1
2
3
public static int hashCode(Object o) {
return o != null ? o.hashCode() : 0;
}

hash

对一个数组求hash值,同样null安全的。实现逻辑:

1
2
3
public static int hash(Object... values) {
return Arrays.hashCode(values);
}

toString

调用对象o的toString方法,同样null安全的。不过这里要注意一下,如果是null的话,会返回null字符串。

相对应的,还有一个重载方法,toString(Object o, String nullDefault) 。 能够自定义null值的返回值,这个挺实用的。

实现逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
  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安全的。实现逻辑:

1
2
3
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 的写法,更优雅。 实现逻辑:

1
2
3
public static boolean isNull(Object obj) {
return obj == null;
}

nonNull

判断对象非null, 可以用来替换 obj!=null 的写法,更优雅。 实现逻辑:

1
2
3
public static boolean nonNull(Object obj) {
return obj != null;
}

requireNonNull

断言判断,要求一个对象是非空的。如果为空则抛出异常,有三个重载方法,可以自定义不同的异常message。

实现逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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方法就介绍这些,有时间 我们再聊聊其他的常用工具类。


java中常用的工具类(1) Objects
https://www.hancher.top/2022/08/19/java-java-utils-1-Objects/
作者
寒澈
发布于
2022年8月19日
许可协议