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

詳解Java如何判斷一個(gè)對(duì)象是否為空

 更新時(shí)間:2024年01月11日 11:00:21   作者:HBLOG  
我們?cè)趧傞_(kāi)始學(xué)習(xí)Java的時(shí)候,遇到過(guò)最多的異常肯定是臭名昭著的空指針異常(NullPointerException),可以說(shuō)它陪伴了我們整個(gè)初學(xué)階段,那么如何優(yōu)雅的判斷一個(gè)對(duì)象是否為空并且減少空指針異常呢,

我們?cè)趧傞_(kāi)始學(xué)習(xí)Java的時(shí)候,遇到過(guò)最多的異常肯定是臭名昭著的空指針異常(NullPointerException),可以說(shuō)它陪伴了我們整個(gè)初學(xué)階段。字符串、對(duì)象、集合等等一不留神就容易出現(xiàn)空指針異常! 那么如何優(yōu)雅的判斷一個(gè)對(duì)象是否為空并且減少空指針異常呢? 今天來(lái)介紹一個(gè)容器類(lèi)——Optional

Optional介紹

Optional是一個(gè)容器類(lèi),它只有兩種情況:

  • 要么包含一個(gè)非空對(duì)象
  • 要么為空

它有助于編寫(xiě)更健壯的代碼,以處理可能為空的值,而不必?fù)?dān)心空指針異常!

Optional用法

Optional的創(chuàng)建

Optional有以下兩種常見(jiàn)的創(chuàng)建方法:

  • Optional.of(T value):創(chuàng)建一個(gè)包含非空值的Optional,如果value為null,則拋出NullPointerException
  • Optional.ofNullable(T value):創(chuàng)建一個(gè)Optional,允許value為null

判斷Optional容器中是否包含對(duì)象

isPresent(): 返回一個(gè)布爾值,如果Optional容器中包含一個(gè)非空對(duì)象則返回true,否則返回false

獲取Optional容器的對(duì)象

  • get(): 如果Optional包含非空值,返回該值;否則拋出NoSuchElementException
  • orElse(T other): 如果Optional為空,返回指定的默認(rèn)值other
  • orElseGet(Supplier<? extends T> other): 如果Optional為空,使用提供的Supplier函數(shù)生成默認(rèn)值
  • orElseThrow(Supplier<? extends X> exceptionSupplier): 如果Optional為空,拋出由提供的Supplier函數(shù)生成的異常

過(guò)濾

filter(Predicate<? super T> predicate): 如果Optional包含非空值且滿足predicate條件,則返回當(dāng)前Optional,否則返回一個(gè)空Optional。

映射

  • map(Function<? super T, ? extends U> mapper): 如果Optional包含非空值,應(yīng)用mapper函數(shù)并返回新的Optional。
  • flatMap(Function<? super T, Optional> mapper): 類(lèi)似于map,但允許mapper函數(shù)返回Optional。

Optional示例

假如我們有一個(gè)User類(lèi),可以使用Optional來(lái)處理可能為空的User對(duì)象。User類(lèi)結(jié)構(gòu)如下:

public class User {
    private String name;
    
    public User(String name) {
        this.name = name;
    }
    
    public String getName() {
        return name;
    }
}

示例:創(chuàng)建Optional

Optional userOptional = Optional.ofNullable(new User("張三"));

示例:判斷Optional是否包含對(duì)象

if (userOptional.isPresent()) {
    System.out.println("用戶存在:" + userOptional.get().getName());
} else {
    System.out.println("用戶不存在");
}

示例:獲取Optional容器的對(duì)象

User user = userOptional.orElse(new User("李四"));
System.out.println("User: " + user.getName());

示例:過(guò)濾

Optional<User> filteredUserOptional = userOptional.filter(u -> u.getName().startsWith("張"));
if (filteredUserOptional.isPresent()) {
    System.out.println("結(jié)果:" + filteredUserOptional.get().getName());
} else {
    System.out.println("未找到對(duì)應(yīng)用戶");
}

示例:映射

Optional<String> userNameOptional = userOptional.map(User::getName);
userNameOptional.ifPresent(name -> System.out.println("用戶名為: " + name));

使用場(chǎng)景總結(jié)

  • 當(dāng)你從某個(gè)方法返回一個(gè)值,但該值可能為空,而調(diào)用者需要明確知道值是否存在。
  • 在處理方法參數(shù)時(shí),你可以用Optional來(lái)表示某個(gè)參數(shù)可以為空,以提醒調(diào)用者可能會(huì)傳入null。
  • 避免繁瑣的null檢查和條件語(yǔ)句,使代碼更簡(jiǎn)潔和可讀!

以上就是詳解Java如何判斷一個(gè)對(duì)象是否為空的詳細(xì)內(nèi)容,更多關(guān)于Java判斷對(duì)象是否為空的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 利用SpringBoot與WebSocket實(shí)現(xiàn)實(shí)時(shí)雙向通信功能

    利用SpringBoot與WebSocket實(shí)現(xiàn)實(shí)時(shí)雙向通信功能

    隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,實(shí)時(shí)通信技術(shù)已經(jīng)逐漸成為現(xiàn)代Web應(yīng)用的核心需求,論是在即時(shí)消息系統(tǒng)還是物聯(lián)網(wǎng)(IoT)應(yīng)用中,WebSocket都提供了一種高效、持久的雙向通信方式,本文將深入解析如何利用Spring Boot實(shí)現(xiàn)WebSocket通信,需要的朋友可以參考下
    2025-07-07
  • java對(duì)象持久化保存的方法詳解

    java對(duì)象持久化保存的方法詳解

    這篇文章主要介紹了java對(duì)象持久化保存的方法詳解,在java應(yīng)用開(kāi)發(fā)的過(guò)程中,經(jīng)常遇到需要持久保存java對(duì)象的情況,比如:用戶信息、博客評(píng)論內(nèi)容等等,本文針對(duì)java對(duì)象的持久化保存方法進(jìn)行討論,簡(jiǎn)述各個(gè)方法的優(yōu)劣,需要的朋友可以參考下
    2023-07-07
  • javaCV開(kāi)發(fā)詳解之收流器實(shí)現(xiàn)

    javaCV開(kāi)發(fā)詳解之收流器實(shí)現(xiàn)

    這篇文章主要介紹了javaCV開(kāi)發(fā)詳解之收流器實(shí)現(xiàn),對(duì)javaCV有研究的同學(xué),可以參考下
    2021-04-04
  • Spring Cloud  Hystrix實(shí)現(xiàn)服務(wù)容錯(cuò)的方法

    Spring Cloud  Hystrix實(shí)現(xiàn)服務(wù)容錯(cuò)的方法

    Hystrix是SpringCloud中重要的熔斷保護(hù)組件,由Netflix開(kāi)源,主要提供延遲和容錯(cuò)管理,以保障分布式系統(tǒng)的高可用性和魯棒性,通過(guò)封裝依賴(lài)項(xiàng)實(shí)現(xiàn)服務(wù)間隔離,引入回退邏輯應(yīng)對(duì)依賴(lài)服務(wù)故障,有效防止系統(tǒng)崩潰和服務(wù)級(jí)聯(lián)故障
    2024-10-10
  • 詳解java基于MyBatis使用示例

    詳解java基于MyBatis使用示例

    這篇文章主要介紹了詳解java基于MyBatis使用示例,對(duì)學(xué)習(xí)MyBatis有一定的幫助,有需要的可以了解一下。
    2016-11-11
  • SpringMVC框架post提交數(shù)據(jù)庫(kù)出現(xiàn)亂碼解決方案

    SpringMVC框架post提交數(shù)據(jù)庫(kù)出現(xiàn)亂碼解決方案

    這篇文章主要介紹了SpringMVC框架post提交數(shù)據(jù)庫(kù)出現(xiàn)亂碼解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java AtomicInteger類(lèi)的使用方法詳解

    Java AtomicInteger類(lèi)的使用方法詳解

    這篇文章主要介紹了Java AtomicInteger類(lèi)的使用方法詳解,文中有具體實(shí)例代碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • Mybatis-Plus之ID自動(dòng)增長(zhǎng)的設(shè)置實(shí)現(xiàn)

    Mybatis-Plus之ID自動(dòng)增長(zhǎng)的設(shè)置實(shí)現(xiàn)

    本文主要介紹了Mybatis-Plus之ID自動(dòng)增長(zhǎng)的設(shè)置實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Spring中@Autowired和@Resource注解的使用區(qū)別詳解

    Spring中@Autowired和@Resource注解的使用區(qū)別詳解

    這篇文章主要介紹了Spring中@Autowired和@Resource注解的使用區(qū)別詳解,@Autowired默認(rèn)根據(jù)type進(jìn)行注入,找到與指定類(lèi)型兼容的?Bean?并進(jìn)行注入,如果無(wú)法通過(guò)type匹配到對(duì)應(yīng)的?Bean?的話,會(huì)根據(jù)name進(jìn)行匹配,如果都匹配不到則拋出異常,需要的朋友可以參考下
    2023-11-11
  • 詳解JUC并發(fā)編程中的進(jìn)程與線程學(xué)習(xí)

    詳解JUC并發(fā)編程中的進(jìn)程與線程學(xué)習(xí)

    這篇文章主要為大家詳細(xì)介紹了JUC并發(fā)編程中的進(jìn)程與線程學(xué)習(xí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03

最新評(píng)論

甘德县| 牙克石市| 增城市| 英超| 当涂县| 雅安市| 微山县| 建阳市| 隆安县| 刚察县| 得荣县| 大埔县| 龙陵县| 丹棱县| 嘉禾县| 荥阳市| 内江市| 东海县| 法库县| 东海县| 桂平市| 社旗县| 加查县| 融水| 阜南县| 玉龙| 三都| 亚东县| 涟源市| 临洮县| 西平县| 海城市| 甘肃省| 昂仁县| 遂平县| 元氏县| 都安| 沂南县| 鹤壁市| 甘泉县| 萍乡市|