新番里h肉3d动漫在线观看网站_玛德琳斯托大r度视频_免费观看已满十八岁电视剧在线播放动漫_国产精品区一区二区三在线播放_成人网站免费看黄a站视频_嗯灬啊灬把腿张开灬a片九月天_99精品国产aⅴv8在线观看_尤物久久99热国产综合_《动漫美女被男人操》是一部优秀的动画

2021
02/28
08:43
文章作者:

什么是Optional類 JDK 8 的optional類

NPE(Null Pointer Exception)一直是我們最頭疼的問題,也是最容易忽視的地方。NPE常是導(dǎo)致Java應(yīng)用程序失敗的最常見的原因。在日常研發(fā)工作中,經(jīng)常會(huì)處理各種變量、集合,但在使用的過程中,往往要進(jìn)行空判斷,不然會(huì)出現(xiàn)NPE。

Optional類實(shí)際上是個(gè)容器:它可以保存類型T的值,或者僅僅保存null。Optional 類的引入很好的解決空指針異常。Optional提供很多有用的方法,這樣我們就不用顯式進(jìn)行空值檢測。盡量避免在程序中直接調(diào)用Optional對象的get()和isPresent()方法,避免使用Optional類型聲明實(shí)體類的屬性。

    Optional.of(T t) : 創(chuàng)建一個(gè) Optional 實(shí)例
    Optional.empty() : 創(chuàng)建一個(gè)空的 Optional 實(shí)例
    Optional.ofNullable(T t):若 t 不為 null,創(chuàng)建 Optional 實(shí)例,否則創(chuàng)建空實(shí)例
    isPresent() : 判斷是否包含值
    orElse(T t) : 如果調(diào)用對象包含值,返回該值,否則返回t
    orElseGet(Supplier s) :如果調(diào)用對象包含值,返回該值,否則返回 s 獲取的值
    map(Function f): 如果有值對其處理,并返回處理后的Optional,否則返回Optional.empty()
    flatMap(Function mapper):與 map 類似,要求返回值必須是Optional

 
如何使用Optional類

下面代碼在兩個(gè)常用場景,對比使用Optional類后的代碼,可以看出,代碼簡潔很多。

第一個(gè)場景:判斷是否為空

    package com.java.bitmap;
     
    import java.util.Optional;
     
    public class OptionalDemo {
     
        public static void main(String[] args) {
            String name="kerry";
            // common way
            if (name!=null&&name.length()!=0){
                System.out.println(name.length());
            }
            //use optional way
            System.out.println(Optional.ofNullable(name).orElse("").length());
     
     
        }
    }

第二個(gè)場景:遍歷list對象

 

     public static void listIterator(List<Integer> list){
            // common way
            if (list!=null&&list.size()!=0){
                for (Integer tmp:list) {
                    System.out.println(tmp);
                }
            }
            //use optional way
            Optional.ofNullable(list).orElse(new ArrayList<>()).forEach(tmp->{System.out.println(tmp);});
        }

第三個(gè)場景:

 

    public User getUser(User user) throws Exception{
        if(user!=null){
            String name = user.getName();
            if("zhangsan".equals(name)){
                return user;
            }
        }else{
            user = new User();
            user.setName("zhangsan");
            return user;
        }
    }

 

    public User getUser(User user) {
        return Optional.ofNullable(user)
                       .filter(u->"zhangsan".equals(u.getName()))
                       .orElseGet(()-> {
                            User user1 = new User();
                            user1.setName("zhangsan");
                            return user1;
                       });
    }

 orElseGet和orElse相似,都可以自定義類型返回,前者支持lamaba表達(dá)式。
————————————————1

我們的服務(wù)

Our Services

新聞資訊

News Center 更多 +

聯(lián)系我們

Contact Us

咨詢熱線:

86-592-5151555

地址: 廈門市集美區(qū)軟件園三期A3棟504室

QQ:43751419

固話:86-592-5151555

手機(jī):18965424099(黃先生)

官網(wǎng):www.btf0511.com

微信二維碼

Copyright © 2000-2021 www.btf0511.com

閩網(wǎng)文〔2018〕11518-507號 | 閩ICP備17022492號-4

游戲作品版權(quán)歸原作者享有,如無意之中侵犯了您的版權(quán),請您按照《版權(quán)保護(hù)投訴指引》來信告知,本網(wǎng)站將應(yīng)您的要求刪除。