在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安全的,可以替换繁琐的判空校验。实现逻辑:
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方法就介绍这些,有时间 我们再聊聊其他的常用工具类。