Java8 Optional實(shí)例操作

Java中常見(jiàn)的NPE錯(cuò)誤真實(shí)傷害了一大推程序猿,不過(guò)JDK8之后,終于出現(xiàn)了,一個(gè)可以解決這個(gè)問(wèn)題的API,這個(gè)就是Optional。

  • 首先看這個(gè)源碼的構(gòu)造方法

    • Optional.ofNullable(null)
    //如果null就返回一個(gè)空對(duì)象
    public static <T> Optional<T> ofNullable(T value) {
        return value == null ? empty() : of(value);
    }
    //EMPTY  private static final Optional<?> EMPTY = new Optional<>();
    public static<T> Optional<T> empty() {
        @SuppressWarnings("unchecked")
        Optional<T> t = (Optional<T>) EMPTY;
        return t;
    }
    
    • Optional.of(null) 異常
    //使用靜態(tài)方法of,這個(gè)值會(huì)進(jìn)行非null判斷,如果null直接就報(bào)異常
    public static <T> Optional<T> of(T value) {
        return new Optional<>(value);
    }
     private Optional(T value) {
        this.value = Objects.requireNonNull(value);
    }
    
  • 然后使用這個(gè)APi的接口方法,通過(guò)和傳統(tǒng)的對(duì)比

    • 傳統(tǒng)方式獲得User的名字name
    要對(duì)if(!=null){
        return user.getName();
    }
    
    • 新方式
    Optional<User> opts = Optional.ofNullable(new User("liuxin1"));
     
    opts.orElse("liuxin2").getName();//如果存在就返回已經(jīng)存在的,如果不存在就返回liuxin2
     
    這段代碼返回的是:liuxin1
    //orElseGet,返回就的是一段函數(shù),就是{}里面的,這個(gè)是lambda表達(dá)式,如果不會(huì),可以看上一教程
    String name = opts.orElseGet(() -> {
            return new User("1");
        }).getName();
    System.out.println(name);//1
    
    
    • map方法 ,lambdm表達(dá)式
    opts.map(user -> {
            return user.getName();
        }).map(name -> {
            return name.toUpperCase();
        }).ifPresent(System.out::println);
    
    • opts.isPresent() 存在就true,反之false

常用的就這些了,就這樣嘍,主要靠理解,少年加油??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,699評(píng)論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,853評(píng)論 18 399
  • 上一篇博客中Java8函數(shù)式編程之三:函數(shù)式接口 - 簡(jiǎn)書(shū)留下的問(wèn)題是關(guān)于Consumer接口的,本篇博客就來(lái)介紹...
    linkinparkzlz閱讀 1,489評(píng)論 0 0
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,036評(píng)論 0 11
  • 感恩今天不平凡的一天,自從做生意以來(lái),一直順風(fēng)順?biāo)模瑳](méi)有生意壓力與人員壓力,但是這段時(shí)間以來(lái)發(fā)生的種種事情,讓我...
    今天的心情好閱讀 250評(píng)論 0 1

友情鏈接更多精彩內(nèi)容