最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JDK8中新增的Optional工具類基本使用

 更新時(shí)間:2021年06月08日 11:03:54   作者:波波烤鴨  
Optional不是對(duì)null關(guān)鍵字的一種替代,而是對(duì)于null判定提供了一種更加優(yōu)雅的實(shí)現(xiàn),接下來(lái)通過(guò)本文給大家分享JDK8中新增的Optional工具類基本使用,感興趣的朋友跟隨小編一起看看吧

Optional類的使用

      JDK8以前,編寫代碼,通常會(huì)出現(xiàn) NullPointerException (空指針異常),通常情況下我們都是通過(guò) if ... else... 來(lái)對(duì)對(duì)象進(jìn)行為空判斷,然后再進(jìn)行邏輯處理,代碼寫起來(lái)也比較冗余。

      JDK8新增了Optional類,使用該類可以避免我們對(duì)空指針的檢查,使代碼看起來(lái)比較優(yōu)雅。

  最近剛好有空給大家整理下JDK8的特性,這個(gè)在實(shí)際開發(fā)中的作用也是越來(lái)越重了,本文重點(diǎn)講解下Optional

這個(gè)Optional類注意是解決空指針的問(wèn)題

1. 以前對(duì)null 的處理

  @Test
    public void test01(){
        //String userName = "張三";
        String userName = null;
        if(userName != null){
            System.out.println("字符串的長(zhǎng)度:" + userName.length());
        }else{
            System.out.println("字符串為空");
        }

    }

2. Optional類

Optional是一個(gè)沒(méi)有子類的工具類,Optional是一個(gè)可以為null的容器對(duì)象,它的主要作用就是為了避免Null檢查,防止NullpointerException,

在這里插入圖片描述

3. Optional的基本使用

Optional對(duì)象的創(chuàng)建方式

/**
     * Optional對(duì)象的創(chuàng)建方式
     */
    @Test
    public void test02(){
        // 第一種方式 通過(guò)of方法  of方法是不支持null的
        Optional<String> op1 = Optional.of("zhangsan");
        //Optional<Object> op2 = Optional.of(null);

        // 第二種方式通過(guò) ofNullable方法 支持null
        Optional<String> op3 = Optional.ofNullable("lisi");
        Optional<Object> op4 = Optional.ofNullable(null);

        // 第三種方式 通過(guò)empty方法直接創(chuàng)建一個(gè)空的Optional對(duì)象
        Optional<Object> op5 = Optional.empty();

    }

4. Optional的常用方法

/**
     * Optional中的常用方法介紹
     *   get(): 如果Optional有值則返回,否則拋出NoSuchElementException異常
     *          get()通常和isPresent方法一塊使用
     *   isPresent():判斷是否包含值,包含值返回true,不包含值返回false
     *   orElse(T t):如果調(diào)用對(duì)象包含值,就返回該值,否則返回t
     *   orElseGet(Supplier s):如果調(diào)用對(duì)象包含值,就返回該值,否則返回 Lambda表達(dá)式的返回值
     */
    @Test
    public void test03(){
        Optional<String> op1 = Optional.of("zhangsan");
        Optional<String> op2 = Optional.empty();

        // 獲取Optional中的值
        if(op1.isPresent()){
            String s1 = op1.get();
            System.out.println("用戶名稱:" +s1);
        }

        if(op2.isPresent()){
            System.out.println(op2.get());
        }else{
            System.out.println("op2是一個(gè)空Optional對(duì)象");
        }

        String s3 = op1.orElse("李四");
        System.out.println(s3);
        String s4 = op2.orElse("王五");
        System.out.println(s4);

        String s5 = op2.orElseGet(()->{
            return "Hello";
        });
        System.out.println(s5);
    }
@Test
    public void test04(){
        Optional<String> op1 = Optional.of("zhangsan");
        Optional<String> op2 = Optional.empty();
        // 如果存在值 就做什么
        op1.ifPresent(s-> System.out.println("有值:" +s));
        op1.ifPresent(System.out::println);
    }

    /**
     * 自定義一個(gè)方法,將Person對(duì)象中的 name 轉(zhuǎn)換為大寫 并返回
     */
    @Test
    public void test05(){
        Person p = new Person("zhangsan",18);
        Optional<Person> op = Optional.of(p);
        String name = getNameForOptional(op);
        System.out.println("name="+name);

    }

    /**
     * 根據(jù)Person對(duì)象 將name轉(zhuǎn)換為大寫并返回
     *    通過(guò)Optional方式實(shí)現(xiàn)
     * @param op
     * @return
     */
    public String getNameForOptional(Optional<Person> op){
       if(op.isPresent()){
           String msg = //op.map(p -> p.getName())
                   op.map(Person::getName)
                   //.map(p -> p.toUpperCase())
                   .map(String::toUpperCase)
                   .orElse("空值");
           return msg;
       }
       return null;
    }

    /**
     * 根據(jù)Person對(duì)象 將name轉(zhuǎn)換為大寫并返回
     * @param person
     * @return
     */
    public String getName(Person person){
        if(person != null){
            String name = person.getName();
            if(name != null){
                return name.toUpperCase();
            }else{
                return null;
            }
        }else{
            return null;
        }
    }

~好了,Optional真的很簡(jiǎn)單,其實(shí)大家只要了解了它在工作中還是蠻有用的

以上就是JDK8中新增的Optional工具類基本使用的詳細(xì)內(nèi)容,更多關(guān)于JDK8 Optional工具類的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java中 IO 常用IO操作類繼承結(jié)構(gòu)分析

    java中 IO 常用IO操作類繼承結(jié)構(gòu)分析

    本篇文章小編為大家介紹,java中 IO 常用IO操作類繼承結(jié)構(gòu)分析。需要的朋友參考下
    2013-04-04
  • Java IO流之節(jié)點(diǎn)流與字符流的相關(guān)知識(shí)總結(jié)

    Java IO流之節(jié)點(diǎn)流與字符流的相關(guān)知識(shí)總結(jié)

    今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著Java節(jié)點(diǎn)流與字符流展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 詳解如何有效地處理Java中的多線程

    詳解如何有效地處理Java中的多線程

    在現(xiàn)代軟件開發(fā)中,多線程編程已成為提高程序性能和響應(yīng)速度的重要手段,Java提供了豐富的多線程支持,使得在Java中實(shí)現(xiàn)并發(fā)操作變得相對(duì)簡(jiǎn)單,本文將深入探討Java多線程編程的基本概念、常見問(wèn)題和最佳實(shí)踐,需要的朋友可以參考下
    2024-06-06
  • java?工作流引擎設(shè)計(jì)實(shí)現(xiàn)解析流程定義文件

    java?工作流引擎設(shè)計(jì)實(shí)現(xiàn)解析流程定義文件

    這篇文章主要為大家介紹了java?工作流引擎設(shè)計(jì)與實(shí)現(xiàn)及流程定義文件解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Java使用JDBC連接postgresql數(shù)據(jù)庫(kù)示例

    Java使用JDBC連接postgresql數(shù)據(jù)庫(kù)示例

    這篇文章主要介紹了Java使用JDBC連接postgresql數(shù)據(jù)庫(kù),結(jié)合實(shí)例形式分析了jdbc連接postgresql數(shù)據(jù)庫(kù)及數(shù)值插入、更新、查詢等相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • Java WeakHashMap案例詳解

    Java WeakHashMap案例詳解

    這篇文章主要介紹了Java WeakHashMap案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • springboot中Excel文件下載踩坑大全

    springboot中Excel文件下載踩坑大全

    本文主要介紹了springboot中Excel文件下載,但是卻容易遇到很多坑,文中通過(guò)示例代碼介紹的非常詳細(xì),感興趣的小伙伴們可以參考一下
    2021-07-07
  • java 裝飾模式(Decorator Pattern)詳解

    java 裝飾模式(Decorator Pattern)詳解

    這篇文章主要介紹了java 裝飾模式(Decorator Pattern)詳解的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Java編程之繼承問(wèn)題代碼示例

    Java編程之繼承問(wèn)題代碼示例

    這篇文章主要介紹了Java編程之繼承問(wèn)題代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Spring boot 路徑映射的實(shí)現(xiàn)

    Spring boot 路徑映射的實(shí)現(xiàn)

    這篇文章主要介紹了spring boot 路徑映射的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11

最新評(píng)論

扎兰屯市| 平乐县| 许昌县| 墨玉县| 三明市| 定远县| 安丘市| 万安县| 潍坊市| 新巴尔虎左旗| 新源县| 城市| 武定县| 吴桥县| 黄大仙区| 疏附县| 北流市| 中牟县| 通化市| 托里县| 美姑县| 双鸭山市| 广德县| 克什克腾旗| 孝义市| 梧州市| 乌兰察布市| 云南省| 柏乡县| 咸丰县| 太白县| 苍梧县| 华池县| 宜都市| 凉城县| 仙桃市| 东乌| 沂水县| 达日县| 丰县| 澄城县|