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指针异常.

  • 相关阅读:
    USACO Milk2 区间合并
    Codeforces 490B Queue【模拟】
    HDU 3974 Assign the task 简单搜索
    HDU 5119 Happy Matt Friends(2014北京区域赛现场赛H题 裸背包DP)
    Cin、Cout 加快效率方法
    POJ 1159 回文LCS滚动数组优化
    POJ 2479 不相交最大子段和
    POJ 1458 最长公共子序列 LCS
    在阿里最深刻的,还是职场之道给我的震撼
    精细化
  • 原文地址:https://www.cnblogs.com/trekxu/p/9496251.html
Copyright © 2011-2022 走看看