zoukankan      html  css  js  c++  java
  • 004 Optional

    一 . 概述

      在我们之前的应用之中,我们常常需要面临的一个问题就是面对各种出现null的情况.

      比如我们的方法的参数是否为null,我们的方法的返回值是否是null.

      我们常见的一种情景就是忘记掉这些特殊的情况,这会导致我们的应用在特殊的情况下挂掉.

      JDK吸取了guava之中的傻瓜式防护的策略,让程序员必须对null进行处理,这样的好处就是程序员在代码的上下文之中常常被提醒需要对null进行处理,这样就能更好的避免掉null引起的问题.


    二 . Optional类

      我们首先看看我们如何创建一个Optional对象.

        @Test
        public void test1() {
            //创建Optional对象
            
            // 使用of方法创建一个Optional对象
            Optional<String> op = Optional.of("trek");
            
            // 如果我们使用null 创建一个对象,那么立马就会得到一个空指针异常
            //op = Optional.<String>of(null);
            
            //我们更为常见的做法就是:这样我们直接就能获取到一个null的Optional对象
            op = Optional.empty();
            
            //当我们也无法确定是否为null的时候,我们可以按照下面的API创建Optional对象
            op = Optional.<String>ofNullable(null);
        }

    当我们学完上面的API之后,如果我们需要创建自己的API模块的时候,我们可以将方法的返回值变成Optional类型,这样使用者在使用的时候,就自动提示可能需要对null进行一定的处理,

      在这样的傻瓜式防护的原则下面,我们就能尽可能的减少空指针的出现.


    三 .从Optional之中获取值

    @Test
        public void test2() {
            //正常的情况下
            Optional<String> op = Optional.of("trek");
            String str = op.get();
            System.out.println(str);
            
            //如果含有null
            op = Optional.ofNullable(null);
            String str1 = op.get(); // 此时就会直接抛出一个异常
            System.out.println(str1);
        }
        @Test
        public void test3() {
            Optional<String> op = Optional.of("trek");
            op.ifPresent(System.out::println);
            op = Optional.ofNullable(null);
            op.ifPresent(System.out::println);
        }

    我们可以使用ifPresent()方法让用户显示的操作Optional对象,这样用户就会知道,我只会在非null的情况下使用这个代码块,而不是完成无脑的使用造成null指针异常.

  • 相关阅读:
    MySQL运维案例分析:Binlog中的时间戳
    身边有位“别人家的程序员”是什么样的体验?
    苹果收取30%过路费_你是顶是踩?
    1019 数字黑洞 (20 分)C语言
    1015 德才论 (25 分)C语言
    1017 A除以B (20 分)C语言
    1014 福尔摩斯的约会 (20 分)
    求n以内最大的k个素数以及它们的和、数组元素循环右移问题、求最大值及其下标、将数组中的数逆序存放、矩阵运算
    1005 继续(3n+1)猜想 (25 分)
    爬动的蠕虫、二进制的前导的零、求组合数、Have Fun with Numbers、近似求PI
  • 原文地址:https://www.cnblogs.com/trekxu/p/9496251.html
Copyright © 2011-2022 走看看