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

2022/08/19 java 工具类 共 2144 字,约 7 分钟

在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安全的,可以替换繁琐的判空校验。实现逻辑:

 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方法就介绍这些,有时间 我们再聊聊其他的常用工具类。

文档信息

Search

    Table of Contents