读Objects源码
程序员文章站
2022-03-19 10:52:50
...
//该类是一个工具类,主要封装了对对象的equals,hashcode,compare和check 异常等方法。 //先看构造函数: //工具类,所以构造函数是私有的。防止反射创建对象所以抛出异常。 private Objects() { throw new AssertionError("No java.util.Objects instances for you!"); } //判断两个对象是否相等。 public static boolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b)); } //判断两个对象是否深层相等。如果是对象则==是深层相等。如果是数组则数组中的每个元素== 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 public static int hashCode(Object o) { return o != null ? o.hashCode() : 0; } //对数组中的对象返回hash码 public static int hash(Object... values) { return Arrays.hashCode(values); } //返回Object的toString public static String toString(Object o) { return String.valueOf(o); } //如果object是null返回默认的字符串 public static String toString(Object o, String nullDefault) { return (o != null) ? o.toString() : nullDefault; } //用给定的比较器比较两个对象 public static <T> int compare(T a, T b, Comparator<? super T> c) { return (a == b) ? 0 : c.compare(a, b); } //check NPE public static <T> T requireNonNull(T obj) { if (obj == null) throw new NullPointerException(); return obj; } //check NPE 并且给出指定的信息 public static <T> T requireNonNull(T obj, String message) { if (obj == null) throw new NullPointerException(message); return obj; } //判断一个对象是否是null public static boolean isNull(Object obj) { return obj == null; } //判断一个对象是否不为null public static boolean nonNull(Object obj) { return obj != null; } //check NPE 消息由指定的Supplier提供 public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) { if (obj == null) throw new NullPointerException(messageSupplier.get()); return obj; }