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

一文詳解Java如何優(yōu)雅地判斷對象是否為空

 更新時間:2024年04月28日 08:30:41   作者:孤蓬&聽雨  
這篇文章主要給大家介紹了關于Java如何優(yōu)雅地判斷對象是否為空的相關資料,在Java中可以使用以下方法優(yōu)雅地判斷一個對象是否為空,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

1. 前言

在實際項目中,我們經常需要對各種變量或對象進行判空校驗。這是因為,如果不進行判空校驗,當遇到空值時,可能會導致程序出現NullPointerException異常。這是一種常見的運行時異常,它會在試圖訪問或操作空對象引用時發(fā)生。為了避免這種異常的出現,我們需要在使用變量或對象之前,進行仔細的判空校驗,以確保它們的值是有效的,或者它們不是空值。通過進行判空校驗,我們可以更好地保證程序的穩(wěn)定性和可靠性,避免潛在的錯誤和異常。

2. 如何判斷為null

2.1 常用判斷

判斷一個對象是否為null有多種方式。除了你提到的java.util中的Objects.nonNull(obj)和hutool中的ObjectUtil,還有其他一些常見的方法。以下是這些方法的詳細描述:

  • java.util.Objects.nonNull(obj)這是Java標準庫提供的一種方法,它檢查給定的對象是否為null。如果對象不為null,則返回true;否則返回false。
  • hutool中的ObjectUtilHutool是一個Java工具包,提供了許多實用的工具方法。ObjectUtil類中也有一個判斷對象是否為null的方法。使用Hutool的ObjectUtil,你可以像這樣檢查一個對象是否為null:ObjectUtil.isNotNull(obj)
  • null != obj這是一種傳統(tǒng)的比較方式,直接使用"!="運算符來檢查一個對象是否為null。如果obj不為null,則表達式的結果為false;如果obj為null,則表達式的結果為true。

2.2 List的判空

像List這種比較特殊的在項目中可能不僅僅是判斷非空了。對于List來說不等于null和List.size()不等于0是兩回事,公司也有實習生常常有把這兩個混淆的情況,list不等于null說明已經初始化了,堆內存中有一塊屬于它的地盤,而size為0說明還沒往里面放東西,舉個例子說就是不等于null代表我現在有個瓶子,size大于0說明我向瓶子里裝水了。

來看一下源碼:

public boolean isEmpty(List list) {
     if (list != null && list.size() > 0) {
         return false;
     } else {
         return true;
     }
 }

相當于判斷瓶子里有沒有水(前提是瓶子已經存在,若瓶子不存在,則會拋出NullPointerException異常)。

所以通常情況下會連用list != null && list.size > 0 來判斷,或者直接使用HuTool中CollUtil工具的isEmpty。諸如此類的還有Set、Map等。

2.3 String的判空

這里還是用瓶子與水的概念,String為null時調用equals(String) 或 length() 等操作拋出 java.lang.NullPointerException。

private void test() {
    String str1 = null;
    //這里將拋出異常
    if (str1.equals("")) {
    }

    //這里將拋出異常
    if (str1.length() > 0) {
    }
}

針對字符串判空有以下幾種方式:

1、大多數人使用的方法之一,直觀,方便,但效率低下:

if(a == null || a.equals(""));

2、比較字符串長度,高效:

if(a == null || a.length() == 0);

3、Java SE 6.0 才剛剛開始提供,效率和方法二差不多:

if(a == null || a.isEmpty());

當然還可以使用org.apache.commons.lang.StringUtils工具。

StringUtils.isNotBlank(a);

  • StringUtils.isNotBlank(null) = false
  • StringUtils.isNotBlank(“”) = false
  • StringUtils.isNotBlank(" ") = false
  • StringUtils.isNotBlank(“bob”) = true
  • StringUtils.isNotBlank(" bob ") = true

該工具類中還有個isNotEmpty()方法,從注釋可以很明顯看出二者的差別

StringUtils.isNotEmpty(a);

  • StringUtils.isNotEmpty(null) = false
  • StringUtils.isNotEmpty(“”) = false
  • StringUtils.isNotEmpty(" ") = true
  • StringUtils.isNotEmpty(“bob”) = true
  • StringUtils.isNotEmpty(" bob ") = true

2.4 Optional

Optional的出現就是用來防止NullpointException的。常見的方法有:

  • .empty() 創(chuàng)建一個空的Optional實例
  • .of(T t): 創(chuàng)建一個Optional 實例,為null時報異常
  • .ofNullable(T t): 若t 不為null,創(chuàng)建Optional 實例,否則創(chuàng)建空實例
  • isPresent(): 判斷容器中是否有值
  • ifPresent(Consume lambda) 容器若不為空則執(zhí)行括號中的Lambda表達式
  • orElse(T t): 獲取容器中的元素,若容器為空則返回括號中的默認值
  • orElseGet(Supplier s): 如果調用對象包含值,返回該值,否則返回s 獲取的值
  • orElseThrow(): 如果為空,就拋出定義的異常,如果不為空返回當前對象
  • map(Function f): 如果有值對其處理,并返回處理后的Optional,否則返回Optional.empty()
  • flatMap(Function mapper): 與map 類似,要求返回值必須是Optional
  • T get() 獲取容器中的元素,若容器為空則拋出NoSuchElement異常

先看個常見的示例:

baseInfo類中有布爾類型的屬性,是空返回false,不為空取其值,需要四行。

boolean blind = false;
if (null != baseInfo.getBlind()) {
    blind = baseInfo.getBlind();
}

當使用Optional時,一行搞定,非常的優(yōu)雅。

boolean blind = Optional.ofNullable(baseInfo.getBlind()).orElse(false);

Java中的Optional 是一個可以為null的容器對象。如果值存在則isPresent()方法返回true。調用get()方法會返回該對象。

創(chuàng)建Optional對象的方式有三種:

  • 創(chuàng)建一個空的Optional對象:Optional.empty()。
  • 使用非null值創(chuàng)建Optional對象:Optional.of(T value)。
  • 使用任意值創(chuàng)建Optional對象:Optional.ofNullable(T value)。

Optional對象的使用場景主要是處理空指針異常的情況,相當于一個容器,當往里面存放對象時,如果對象為空(null),Optional會返回一個空的Optional實例,反之會返回一個非空的Optional實例。

以下是使用Optional對象的示例:

Optional<String> optional = Optional.ofNullable("test");  
optional.isPresent();           // true  
optional.get();                 // "test"  
optional.orElse("fallback");     // "test"  
  
optional.ifPresent((s) -> System.out.println(s.charAt(0)));     // "t"

以上代碼中,首先創(chuàng)建了一個包含字符串"test"的Optional對象。然后使用isPresent()方法檢查該值是否為null,使用get()方法獲取該值。接下來使用ifPresent()方法檢查值是否存在,如果存在則執(zhí)行l(wèi)ambda表達式中的代碼。在這個例子中,輸出結果是"t"。

總結來說,Java中的Optional對象可以用于避免空指針異常的情況,它提供了一種更優(yōu)雅、更簡潔的方式來處理可能為空的值。

3. 總結

每種方法都有其適用的場景,鏈式編程也不例外。雖然它可以使代碼更優(yōu)雅,但可能會降低邏輯性和可讀性。因此,在項目中使用時,需要根據具體情況慎重考慮。

到此這篇關于Java如何優(yōu)雅地判斷對象是否為空的文章就介紹到這了,更多相關Java判斷對象是否為空內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java實現延遲/超時/定時問題

    java實現延遲/超時/定時問題

    這篇文章主要介紹了java實現延遲/超時/定時問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Spring??AOP的兩種使用方法

    Spring??AOP的兩種使用方法

    這篇文章主要介紹了Spring?AOP的兩種使用方法,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • Java中@ConditionalOnProperty注解使用

    Java中@ConditionalOnProperty注解使用

    在Spring?Boot中,@ConditionalOnProperty注解是一種方便的工具,用于根據應用程序配置文件中的屬性值來控制Bean的創(chuàng)建和加載,本文就來介紹一下Java中@ConditionalOnProperty注解使用,感興趣的可以了解一下
    2023-11-11
  • SpringBoot利用Junit動態(tài)代理實現Mock方法

    SpringBoot利用Junit動態(tài)代理實現Mock方法

    說到Spring Boot 單元測試主要有兩個主流集成分別是Mockito,Junit,這個各有特點,在實際開發(fā)中,我想要的測試框架應該是這個框架集成者,本文給大家介紹了SpringBoot利用Junit動態(tài)代理實現Mock方法,需要的朋友可以參考下
    2024-04-04
  • Java 獲取Web項目相對webapp地址的實例

    Java 獲取Web項目相對webapp地址的實例

    下面小編就為大家?guī)硪黄狫ava 獲取Web項目相對webapp地址的實例。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • 如何用Jfinal連接多個數據庫

    如何用Jfinal連接多個數據庫

    這篇文章主要介紹了如何用Jfinal連接多個數據庫,幫助大家更好的理解和學習使用Jfinal,感興趣的朋友可以了解下
    2021-03-03
  • java連接Oracle數據庫的工具類

    java連接Oracle數據庫的工具類

    這篇文章主要介紹了java連接Oracle數據庫的工具類,非常的實用,需要的小伙伴參考下。
    2015-03-03
  • eclipse中沒有SERVER的解決辦法(超詳細)

    eclipse中沒有SERVER的解決辦法(超詳細)

    使用eclipse進行tomcat配置時,經常會發(fā)現一個重要的問題就是打開eclipse之后沒有了server選項,所以本給大家詳細介紹了eclipse中沒有SERVER的解決辦法,文中有詳細的圖文講解,需要的朋友可以參考下
    2023-12-12
  • Spring Boot讀取resources目錄文件方法詳解

    Spring Boot讀取resources目錄文件方法詳解

    這篇文章主要介紹了Spring Boot讀取resources目錄文件方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • maven創(chuàng)建spark項目的pom.xml文件配置demo

    maven創(chuàng)建spark項目的pom.xml文件配置demo

    這篇文章主要為大家介紹了maven創(chuàng)建spark項目的pom.xml文件配置demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05

最新評論

宣化县| 普陀区| 濮阳市| 武安市| 祁连县| 绿春县| 景德镇市| 宁国市| 清苑县| 塘沽区| 石泉县| 镇远县| 万全县| 章丘市| 永德县| 和政县| 靖州| 罗江县| 时尚| 长春市| 长沙县| 五寨县| 济南市| 那曲县| 达拉特旗| 施秉县| 紫金县| 江川县| 台州市| 休宁县| 正阳县| 象山县| 襄汾县| 德令哈市| 阿巴嘎旗| 凉城县| 教育| 全州县| 新兴县| 招远市| 寻甸|