JDK源码学习--java.util.Objects类
来源:互联网 发布:数据库系统阶段特点 编辑:程序博客网 时间:2024/06/05 02:55
首先来看看本类的定义
public final class Objects { private Objects() { throw new AssertionError("No java.util.Objects instances for you!"); }
这个类定义为final类型的,所以不能继承,并且它提供了一个私有的构造方法,外界无法构造其实例,所以只能通过类名来调用它的静态方法进行处理。
以下是此类中的方法:
从方法的签名不难看出其作用,所以下面就直接看代码实现:
Objects中定义了两个用于对象比较的方法,如下:
/** * 判断两个对象是否相等,如果该对象重写了equals方法则调用重写的equals方法,否则调用object类的equals方法,此时比较的是 * 两个对象对象的地址。而数组对象没有重写equals方法,所以比较的是地址。 */ 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); }
另外几个我认为比较好用的方法是
/** * 判断对象是否为空,如果为空则抛出异常从而避免了程序中的空指针等问题 */ 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 boolean isNull(Object obj) { return obj == null; } public static boolean nonNull(Object obj) { return obj != null; } public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) { if (obj == null) throw new NullPointerException(messageSupplier.get()); return obj; }
因为这几个方法中都进行了空指针的判断,所以可以很方便地避免空指针的问题。
阅读全文
0 0
- JDK源码学习--java.util.Objects类
- java.util.Objects 源码学习
- 【Java】java.util.Objects 源码学习
- 【Java】java.util.Objects 源码学习
- 【Java】java.util.Objects 源码学习
- 【Java】java.util.Objects 源码学习
- JDK源码学习--java.util.Arrays
- java.util.Objects工具类
- java.util.Objects工具类示例
- java.util.Objects 简介
- JDK源码阅读 java.util.concurrent—并发容器类
- JDK源码分析之java.util.ArrayList
- Jdk源码阅读之Java.util.concurrent
- 【jdk源码解析三】java.util.Hashtable
- JDK源码分析(1)-java.util.ArrayList
- JDK源码分析(2)-java.util.LinkedList
- JDK源码——java.util
- JDK源码——java.util.concurrent
- http协议状态码
- 对HashSet进行排序
- 浅谈Visual Studio与Dev C++
- ESP8266/node MCU网络无线远程烧写(OTA)与MQTT协议配合使用
- java多线程(二)之线程安全和线程同步
- JDK源码学习--java.util.Objects类
- [Python 实战]
- shell学习(一)
- 【Android中级工程师】跨进程通信IPC
- F
- 事件冒泡和事件捕获
- Android RecyclerView的多条目加载的点击事件
- mycat1.6.5分片(一致性hash)
- 属性动画图片从上移动到屏幕中间,放大图片的二倍再缩小到原来,自定义圆实现倒计时,解析数据显示,点击条目实现js交互