欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1. 前言

在實際項目中,我們經(jīng)常需要對各種變量或對象進行判空校驗。這是因為,如果不進行判空校驗,當遇到空值時,可能會導致程序出現(xiàn)NullPointerException異常。這是一種常見的運行時異常,它會在試圖訪問或操作空對象引用時發(fā)生。為了避免這種異常的出現(xiàn),我們需要在使用變量或對象之前,進行仔細的判空校驗,以確保它們的值是有效的,或者它們不是空值。通過進行判空校驗,我們可以更好地保證程序的穩(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說明已經(jīng)初始化了,堆內存中有一塊屬于它的地盤,而size為0說明還沒往里面放東西,舉個例子說就是不等于null代表我現(xiàn)在有個瓶子,size大于0說明我向瓶子里裝水了。

來看一下源碼:

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

相當于判斷瓶子里有沒有水(前提是瓶子已經(jīng)存在,若瓶子不存在,則會拋出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、大多數(shù)人使用的方法之一,直觀,方便,但效率低下:

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的出現(xiàn)就是用來防止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)雅,但可能會降低邏輯性和可讀性。因此,在項目中使用時,需要根據(jù)具體情況慎重考慮。

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

相關文章

  • Java開發(fā)必備知識之數(shù)組詳解

    Java開發(fā)必備知識之數(shù)組詳解

    數(shù)組對于每一門編程語言來說都是重要的數(shù)據(jù)結構之一,當然不同語言對數(shù)組的實現(xiàn)及處理也不盡相同.本篇文章為大家整理了Java最全關于數(shù)組的知識點,并給出其對應的代碼,需要的朋友可以參考下
    2021-06-06
  • Java日常練習題,每天進步一點點(9)

    Java日常練習題,每天進步一點點(9)

    下面小編就為大家?guī)硪黄狫ava基礎的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • Spring使用xml方式整合第三方框架流程詳解

    Spring使用xml方式整合第三方框架流程詳解

    這篇文章主要介紹了Spring使用xml方式整合第三方框架流程,Spring會在應用上下文中為某個bean尋找其依賴的bean,Spring中bean有三種裝配機制,分別是:在xml中顯式配置、在java中顯式配置、隱式的bean發(fā)現(xiàn)機制和自動裝配
    2023-02-02
  • MyBatis-Plus中更新操作的兩種實現(xiàn)

    MyBatis-Plus中更新操作的兩種實現(xiàn)

    本文主要介紹了MyBatis-Plus中更新操作的兩種實現(xiàn),主要是通過id更新和條件更新,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • Java設計模式之監(jiān)聽器模式實例詳解

    Java設計模式之監(jiān)聽器模式實例詳解

    這篇文章主要介紹了Java設計模式之監(jiān)聽器模式,結合實例形式較為詳細的分析了java設計模式中監(jiān)聽器模式的概念、原理及相關實現(xiàn)與使用技巧,需要的朋友可以參考下
    2018-02-02
  • 原理分析SonarQube中IdentityProvider賬戶互斥現(xiàn)象

    原理分析SonarQube中IdentityProvider賬戶互斥現(xiàn)象

    這篇文章主要為大家介紹分析SonarQube中IdentityProvider賬戶互斥現(xiàn)象原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • java 動態(tài)代理的方法總結

    java 動態(tài)代理的方法總結

    這篇文章主要介紹了java 動態(tài)代理的方法總結的相關資料,需要的朋友可以參考下
    2017-04-04
  • JavaWeb JDBC + MySql 通訊錄實現(xiàn)簡單的增刪改查功能案例詳解

    JavaWeb JDBC + MySql 通訊錄實現(xiàn)簡單的增刪改查功能案例詳解

    這篇文章主要介紹了JavaWeb JDBC + MySql 通訊錄實現(xiàn)簡單的增刪改查功能,結合具體案例形式詳細分析了JavaWeb JDBC + MySql數(shù)據(jù)庫連接、增刪改查等相關操作技巧與注意事項,需要的朋友可以參考下
    2019-08-08
  • 詳解Java 中泛型的實現(xiàn)原理

    詳解Java 中泛型的實現(xiàn)原理

    這篇文章主要介紹了詳解Java 中泛型的實現(xiàn)原理,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下
    2021-03-03
  • Java中的按值傳遞和按引用傳遞的代碼詳解

    Java中的按值傳遞和按引用傳遞的代碼詳解

    本文通過實例代碼給大家介紹了Java中的按值傳遞和按引用傳遞的相關知識,感興趣的朋友跟隨腳本之家小編一起學習吧
    2018-06-06

最新評論