亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解Java如何判斷一個對象是否為空

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

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

Optional介紹

Optional是一個容器類,它只有兩種情況:

  • 要么包含一個非空對象
  • 要么為空

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

Optional用法

Optional的創(chuàng)建

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

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

判斷Optional容器中是否包含對象

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

獲取Optional容器的對象

  • 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ù)生成的異常

過濾

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

映射

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

Optional示例

假如我們有一個User類,可以使用Optional來處理可能為空的User對象。User類結(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是否包含對象

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

示例:獲取Optional容器的對象

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

示例:過濾

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

示例:映射

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

使用場景總結(jié)

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

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

相關(guān)文章

  • SpringBoot打印啟動時異常堆棧信息詳解

    SpringBoot打印啟動時異常堆棧信息詳解

    在本篇文章里小編給大家整理的是關(guān)于SpringBoot打印啟動時異常堆棧信息,有需要的朋友們可以學(xué)習(xí)下。
    2019-11-11
  • 詳解記錄Java Log的幾種方式

    詳解記錄Java Log的幾種方式

    很多小伙伴不知道如何記錄日志,今天特地整理了本篇文章,文中有非常詳細(xì)的介紹及代碼示例,對小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • Java List集合排序?qū)崿F(xiàn)方法解析

    Java List集合排序?qū)崿F(xiàn)方法解析

    這篇文章主要介紹了Java List集合排序?qū)崿F(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • Tomcat+JDK安裝和配置教程

    Tomcat+JDK安裝和配置教程

    這篇文章主要為大家詳細(xì)介紹了Tomcat+JDK安裝和配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • IDEA 工程里 new不出來Vue文件的圖文解決方案

    IDEA 工程里 new不出來Vue文件的圖文解決方案

    這篇文章主要介紹了IDEA 工程里 new不出來Vue文件的解決方案,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • springboot實(shí)現(xiàn)發(fā)送QQ郵箱

    springboot實(shí)現(xiàn)發(fā)送QQ郵箱

    這篇文章主要為大家詳細(xì)介紹了springboot實(shí)現(xiàn)發(fā)送QQ郵箱,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • springboot?通過博途獲取plc點(diǎn)位的數(shù)據(jù)代碼實(shí)現(xiàn)

    springboot?通過博途獲取plc點(diǎn)位的數(shù)據(jù)代碼實(shí)現(xiàn)

    這篇文章主要介紹了springboot?通過博途獲取plc點(diǎn)位的數(shù)據(jù)的代碼實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Java實(shí)現(xiàn)暴力匹配算法

    Java實(shí)現(xiàn)暴力匹配算法

    暴力匹配算法是一種簡單的字符串匹配算法,本文主要介紹了Java實(shí)現(xiàn)暴力匹配算法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 詳解獲取Spring MVC中所有RequestMapping以及對應(yīng)方法和參數(shù)

    詳解獲取Spring MVC中所有RequestMapping以及對應(yīng)方法和參數(shù)

    本篇文章主要介紹了詳解獲取Spring MVC中所有RequestMapping以及對應(yīng)方法和參數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • mybatis plus 的動態(tài)表名的配置詳解

    mybatis plus 的動態(tài)表名的配置詳解

    這篇文章主要介紹了mybatis plus 的動態(tài)表名的配置詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評論