`

Objects

    博客分类:
  • java
 
阅读更多

 

/**
@since 1.7
 */
public final class Objects {
......
}

1.7出现的工具类,final修饰类不可继承,这个类断子绝孙了。

 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));
    }

 这个方法相当于 == (对象地址对比)和 equals() ,因为这里有一行代码为a != 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);
    }

没啥好看的,让我们去看Arrays.deepEquals0(a, b)这一段。

static boolean deepEquals0(Object e1, Object e2) {
        assert e1 != null;
        boolean eq;
        if (e1 instanceof Object[] && e2 instanceof Object[])
            eq = deepEquals ((Object[]) e1, (Object[]) e2);
        else if (e1 instanceof byte[] && e2 instanceof byte[])
            eq = equals((byte[]) e1, (byte[]) e2);
        else if (e1 instanceof short[] && e2 instanceof short[])
            eq = equals((short[]) e1, (short[]) e2);
        else if (e1 instanceof int[] && e2 instanceof int[])
            eq = equals((int[]) e1, (int[]) e2);
        else if (e1 instanceof long[] && e2 instanceof long[])
            eq = equals((long[]) e1, (long[]) e2);
        else if (e1 instanceof char[] && e2 instanceof char[])
            eq = equals((char[]) e1, (char[]) e2);
        else if (e1 instanceof float[] && e2 instanceof float[])
            eq = equals((float[]) e1, (float[]) e2);
        else if (e1 instanceof double[] && e2 instanceof double[])
            eq = equals((double[]) e1, (double[]) e2);
        else if (e1 instanceof boolean[] && e2 instanceof boolean[])
            eq = equals((boolean[]) e1, (boolean[]) e2);
        else
            eq = e1.equals(e2);
        return eq;
    }

类型判断后进行转换,如果两个对象不是同一类型,肯定不相同。找个简单的看一眼

public static boolean equals(byte[] a, byte[] a2) {
        if (a==a2)
            return true;
        if (a==null || a2==null)
            return false;

        int length = a.length;
        if (a2.length != length)
            return false;

        for (int i=0; i<length; i++)
            if (a[i] != a2[i])
                return false;

        return true;
    }

判断地址是否相同,在判断是否为空,对比那个数组长度,最后在一个个元素对比。

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

 获取hashCode

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

 获取一组数据hashcode,一组的hashcode叠加

public static int hashCode(Object a[]) {
        if (a == null)
            return 0;

        int result = 1;

        for (Object element : a)
            result = 31 * result + (element == null ? 0 : element.hashCode());

        return result;
    }

 对象变字符串

 public static String toString(Object o) {
        return String.valueOf(o);
    }

  如果传入的对象为空的话,返回你传入nullDefault参数

public static String toString(Object o, String nullDefault) {
        return (o != null) ? o.toString() : nullDefault;
    }

 如果对象相同,字典比较就是0,否则就按照你写的字典进行比较

public static <T> int compare(T a, T b, Comparator<? super T> c) {
        return (a == b) ? 0 :  c.compare(a, b);
    }

  判断穿入对象是否为null

 public static <T> T requireNonNull(T obj) {
        if (obj == null)
            throw new NullPointerException();
        return obj;
    }

判断穿入对象是否为null,如果是的话抛出特定异常

public static <T> T requireNonNull(T obj, String message) {
        if (obj == null)
            throw new NullPointerException(message);
        return obj;
    }

判断对象是否为空,返回的是boolean值

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

  判断对象不等于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;
    }
@FunctionalInterface
public interface Supplier<T> {

    /**
     * Gets a result.
     *
     * @return a result
     */
    T get();
}

 这是个啥玩意呢?@FunctionalInterface标记在接口上,“函数式接口”是指仅仅只包含一个抽象方法的接口

分享到:
评论

相关推荐

    DicomObjects用户手册-中文版

    《DicomObjects用户手册-中文版》是一本详细介绍如何使用DicomObjects库进行DICOM(Digital Imaging and Communications in Medicine)文件处理的指南。该手册涵盖了从基础操作到高级特性的全面内容,旨在帮助用户...

    DicomObjects用户手册中文版

    **DICOM标准与DICOMObjects概述** DICOM(Digital Imaging and Communications in Medicine)是一种医疗行业的标准,用于在不同设备之间交换医学影像和其他相关信息。这个标准不仅涵盖了数据格式,还涉及了网络传输...

    FME Objects 开发文档 基于.net

    FME Objects是Safe Software公司为开发者提供的一种API(应用程序接口),用于在.NET环境中与FME(Feature Manipulation Engine)进行交互,实现空间数据转换、处理和集成的自定义功能。这篇开发文档详细阐述了如何...

    《Beginning C# Objects中文版:概念到代码》

    《Beginning C# Objects中文版:概念到代码》关注的是软件对象:什么是软件对象?为什么它们如此神奇而直白以及如何正确使用对象去构建一个软件应用?这也是一本关于C#的书,但它并非一本“C#大全”,而是一份对该...

    Objects365 数据集

    Objects365 数据集是一个大型、多样化的计算机视觉对象识别数据集,专为深度学习模型的训练和评估而设计。这个数据集包含了丰富的图像资源,覆盖了日常生活中大量的物体类别,旨在推动计算机视觉技术在物体识别领域...

    qt RemoteObjects 示例

    Qt RemoteObjects是Qt框架中的一个高级特性,它允许在不同进程甚至不同设备之间进行对象通信。这个技术基于Qt的信号和槽机制,使得分布式系统开发变得更加简单和高效。本示例将详细介绍如何使用Qt RemoteObjects,...

    SuperMap Objects 提取等值面

    在IT行业中,SuperMap Objects是一款强大的地理信息系统(GIS)开发工具,它提供了丰富的地图操作和空间分析功能。本文将深入探讨如何使用SuperMap Objects在VC6环境下通过COM组件来实现栅格数据的等值面提取,并...

    SAP BusinessObjects Data Services Designer Guide

    ### SAP BusinessObjects Data Services Designer Guide 知识点详解 #### 一、概述 **SAP BusinessObjects Data Services**(简称BODI)是一款强大的数据整合工具,它为企业提供了全面的数据质量管理解决方案。本...

    BusinessObjects XI 3.1 使用文档

    《BusinessObjects XI 3.1 使用文档》是针对BusinessObjects 3.1版本的一份详尽指南,旨在帮助用户理解并有效地使用这个企业级的商业智能(BI)平台。BusinessObjects,现为SAP的一部分,是一款强大的数据分析工具,...

    Objects鼠标右键功能

    在IT行业中,SuperMap Objects是一款强大的地理信息系统(GIS)开发框架,它提供了丰富的地图操作和空间数据处理功能。本文将详细解析如何利用SuperMap Objects实现鼠标右键功能,包括新建数据集、删除数据集以及...

    BusinessObjects Enterprise新增功能

    ### BusinessObjects Enterprise XI新增功能详解 #### 一、概述 BusinessObjects Enterprise XI 是一款功能强大的业务智能平台,它集成了多种先进的制表、查询和分析工具。除了支持语义层、数据集成和安全性等关键...

    SuperMap Objects Java字段更新

    在GIS(地理信息系统)开发中,SuperMap Objects Java是一个强大的组件,它提供了丰富的地图操作和空间分析功能。本文将深入探讨如何使用SuperMap Objects Java来实现字段更新这一关键任务,特别是在实际项目中处理...

    SAP BusinessObjects Web Intelligence 桌面用户指南

    SAP BusinessObjects Web Intelligence是一个强大的业务智能工具,它允许用户根据需要分析的数据创建和编辑报表。用户能够利用自己在系统中的许可和安全权限,对报表中的数据执行各种交互式分析操作,例如通过向下...

    SuperMap Objects 综合救援调度

    《SuperMap Objects 实现应急救援综合调度》 SuperMap Objects 是一款强大的GIS(地理信息系统)开发组件,它为开发者提供了丰富的地图操作、空间分析以及数据管理功能。在应急救援领域,利用SuperMap Objects 可以...

    3D Pose Estimation and 3D Model Retrieval for Objects in the Wild

    to retrieve 3D models for objects in the wild. Our contri- bution is twofold. We first present a 3D pose estimation approach for object categories which significantly outper- forms the state-of-the-...

    BusinessObjects使用手册

    ### BusinessObjects 使用手册知识点梳理 #### 一、绪论 - **BusinessObjects 是什么?** - BusinessObjects 是一款强大的商业智能(BI)工具,旨在帮助企业用户从各种数据源中提取、分析并可视化数据,从而支持...

    BusinessObjects SDK 开发参考

    **BusinessObjects SDK 开发参考** BusinessObjects SDK,全称为SAP BusinessObjects Software Development Kit,是SAP公司提供的一套用于开发、集成和扩展BusinessObjects产品的工具集。它允许开发人员利用Java、...

Global site tag (gtag.js) - Google Analytics