Objects类常用方法简介

java.util.Objects类是java7新增的工具类,其中提供了一些可以避免空指针异常的方法。

  • 判断对象为空

判断对象为空的方法是:isNull(Object obj);

示例代码如下图所示:

public class ObjectsTest {

    public static void main(String[] args) {

        // 判断一个对象是否为空
        String str = null;
        System.out.println("str是否为空:" + Objects.isNull(str));

        // 赋值后判断该对象是否为空
        str = "hello world";
        System.out.println("str是否为空:" + Objects.isNull(str));
    }
}

执行结果如下图所示:

Objects类常用方法简介_第1张图片

  • 判断对象不为空

判断对象不为空的方法是:nonNull(Object obj);

示例代码如下所示:

public class ObjectsTest {

    public static void main(String[] args) {

        // 判断一个对象是否为空
        String str = null;
        System.out.println("str是否不为空:" + Objects.nonNull(str));

        // 赋值后判断该对象是否为空
        str = "hello world";
        System.out.println("str是否不为空:" + Objects.nonNull(str));
    }
}

执行结果如下图所示:

Objects类常用方法简介_第2张图片

  • 要求对象不能为空,为空则抛出异常

要求对象不能为空,为空则抛出异常的方法有多个,分别为:

requireNonNull(T obj):对象为空时,抛出默认的异常。相关的示例代码如下所示:

public class ObjectsTest {

    public static void main(String[] args) {

        // 对象为空的例子
        try {
            String str = null;
            // 对象为空,抛出异常
            String s = Objects.requireNonNull(str);
            System.out.println(s);
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("================================");

        // 对象不为空的例子
        try {
            String str2 = "hello world";
            String s = Objects.requireNonNull(str2);
            System.out.println(s);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

执行结果如下图所示:

Objects类常用方法简介_第3张图片

requireNonNull(T obj, String messge): 对象为空时,抛出指定messge信息的异常。相关示例代码如下所示:

public class ObjectsTest {

    public static void main(String[] args) {

        // 对象为空的例子
        try {
            String str = null;

            // 对象为空,抛出异常
            String s = Objects.requireNonNull(str, "该对象为空");
            System.out.println(s);
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("================================");

        // 对象不为空的例子
        try {
            String str2 = "hello world";
            String s = Objects.requireNonNull(str2, "该对象为空");
            System.out.println(s);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

执行结果如下图所示:

Objects类常用方法简介_第4张图片

requireNonNull(T obj, Supplier messageSupplier): 对象为空时,通过指定的生产者对象来获取异常信息。示例代码如下所示:

public class ObjectsTest {

    public static void main(String[] args) {

        // 对象为空的例子
        try {
            String str = null;

            // 对象为空,抛出异常
            String s = Objects.requireNonNull(str, () -> {
                System.out.println("执行了生产者对象");
                return "该对象不能为空";
            });
            System.out.println(s);
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("================================");

        // 对象不为空的例子
        try {
            String str2 = "hello world";
            String s = Objects.requireNonNull(str2, () -> {
                System.out.println("执行了生产者对象");
                return "该对象不能为空";
            });
            System.out.println(s);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

执行结果如下图所示:

Objects类常用方法简介_第5张图片

requireNonNullElse(T obj, T defaultObj): 对象为空时,使用传入的默认对象。如果传入的默认对象也为为空,则抛出默认的异常。示例代码如下所示:

public class ObjectsTest {

    public static void main(String[] args) {

        // 对象为空的例子
        try {
            String str = null;

            // 对象为空,抛出异常
            String s = Objects.requireNonNullElse(str, "默认对象");
            System.out.println(s);
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("================================");

        // 对象不为空的例子
        try {
            String str2 = "hello world";
            String s = Objects.requireNonNullElse(str2, "默认对象");
            System.out.println(s);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

执行结果如下图所示:

Objects类常用方法简介_第6张图片

requireNonNullElseGet(T obj, Supplier supplier ): 对象为空时,通过传入的生成者对象来获取一个对象,若获取的对象不为空,则返回该对象。若获取的对象为空,则抛出获取对象为空的异常。示例代码如下所示:

public class ObjectsTest {

    public static void main(String[] args) {

        // 对象为空的例子
        try {
            String str = null;

            // 对象为空,抛出异常
            String s = Objects.requireNonNullElseGet(str, () -> {
                System.out.println("执行生产者对象");
                return "默认对象";
            });
            System.out.println(s);
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("================================");

        // 对象不为空的例子
        try {
            String str2 = "hello world";
            String s = Objects.requireNonNullElseGet(str2, () -> {
                System.out.println("执行生产者对象");
                return "默认对象";
            });
            System.out.println(s);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

执行结果如下图所示:

Objects类常用方法简介_第7张图片

  • 对象判断相等

判断对象相等的方法为:equals(Object a, Object b) 和 deepEquals(Object a, Object b)两个方法。相对于equals方法来说,deepEquals方法还可以比较两个数组或其他集合是否相等。示例代码如下所示:

public class ObjectsTest {

    public static void main(String[] args) {

        // 使用Objects.equals(Object a, Object b)判断是否相等
        System.out.println("null和null是否相等:" + Objects.equals(null, null));
        System.out.println("null和\"hello world\"是否相等:" + Objects.equals(null, "hello world"));
        System.out.println("\"tom\"和\"tom\"是否相等:" + Objects.equals("tom", "tom"));

        System.out.println("==================================================================");
        
        // 使用Objects.deepEquals(Object a, Object b)判断是否相等
        System.out.println("null和null是否相等:" + Objects.deepEquals(null, null));
        System.out.println("null和\"hello world\"是否相等:" + Objects.deepEquals(null, "hello world"));
        int[] arr1 = {1, 3, 4};
        int[] arr2 = {1, 3, 4};
        System.out.println("arr1和arr2是否相等:" + Objects.deepEquals(arr1, arr2));
        int[] arr3 = {1, 4, 3};
        System.out.println("arr1和arr3是否相等:" + Objects.deepEquals(arr1, arr3));
        List list = Arrays.asList(1, 2, 3);
        System.out.println("arr1和list是否相等:" + Objects.deepEquals(arr1, list));
    }
}

执行结果如下图所示:

Objects类常用方法简介_第8张图片

  • 判断两个对象的大小

判断两个对象的大小的方法是:compare(T a, T b, Comparator c)。该方法,需要传入一个比较器。示例代码如下图所示:

public class ObjectsTest {

    public static void main(String[] args) {

        int result = Objects.compare(12, 14, (a, b) -> a - b == 0? 0 : a - b > 0 ? 1: -1);
        System.out.println(result);
        
    }
}

执行结果如下图与所示:

Objects类常用方法简介_第9张图片

自此,Objects的常用方法就已经介绍完毕。

你可能感兴趣的:(学习笔记)