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

淺析Java中如何優(yōu)雅地處理null值

 更新時(shí)間:2025年04月16日 14:55:34   作者:寫(xiě)bug寫(xiě)bug  
這篇文章主要為大家詳細(xì)介紹了如何結(jié)合 Lambda 表達(dá)式和 Optional,讓 Java 更優(yōu)雅地處理 null 值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

假設(shè)我們有一個(gè)學(xué)生對(duì)象,以及這個(gè)學(xué)生對(duì)象的 Optional 包裝器:

public class Student {
    private String name;
    private Integer age;

    // 全參構(gòu)造函數(shù)
    public Student(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }
    // toString 方法
    @Override
    public String toString() {
        return"Student{" + "name='" + name + '\'' + ", age=" + age + '}';
    }
}

public class OptionalTest {
    public static void main(String[] args) {
        Student student = new Student("Bob", 18);
        Optional<Student> studentOpt = Optional.ofNullable(student);
    }
}

如果不與 Lambda 結(jié)合使用,Optional 并不能簡(jiǎn)化原本繁瑣的 null 值檢查。例如:

// 編寫(xiě)方法 1
if (student == null) {
    return UNKNOWN_STUDENT;
} else {
    return student;
}
// 編寫(xiě)方法 2
if (!studentOpt.isPresent()) {
    return UNKNOWN_STUDENT;
} else {
    return studentOpt.get();
}

只有將 Optional 與 Lambda 結(jié)合使用,才能發(fā)揮它真正的威力!

現(xiàn)在,讓我們對(duì)比一下 Java 8 中 Lambda + Optional 與傳統(tǒng) Java 在以下四種常見(jiàn) null 處理場(chǎng)景中的差異。

場(chǎng)景 1:不為 null 則執(zhí)行

// if 語(yǔ)句
if (student!= null) {
    System.out.println(student);
}
// Optional
studentOpt.ifPresent(System.out::println);

場(chǎng)景 2:不為 null 則返回,為 null 則返回特定值或拋出異常

// if 語(yǔ)句
if (student == null) {
    return UNKNOWN_STUDENT; // 或拋出異常
} else {
    return student;
}
// Optional
return studentOpt.orElse(UNKNOWN_STUDENT);
return studentOpt.orElseThrow(RuntimeException::new);

場(chǎng)景 3:不為 null 則返回,為 null 則由調(diào)用方法

// if 語(yǔ)句
if (student == null) {
    return UNKNOWN_STUDENT;
} else {
    return generateWithFunction();
}
// Optional
return studentOpt.orElseGet(() -> generateWithFunction());

場(chǎng)景 4:嵌套 null 檢查

// Java 7
if (student!= null) {
    String name = student.getName();
    if (name!= null) {
        return name;
    } else {
        return null;
    }
} else {
    return null;
}
// Java 8
return studentOpt.map(Student::getName).orElse(null);

從以上四種場(chǎng)景可以明顯看出,Optional + Lambda 讓我們少寫(xiě)了很多 if-else 代碼塊。尤其是場(chǎng)景 4,傳統(tǒng)的 Java 寫(xiě)法顯得冗長(zhǎng)且難以理解,而 Optional+Lambda 則簡(jiǎn)潔明了,清晰易懂。

總結(jié)

通過(guò)結(jié)合 Lambda 表達(dá)式和 Optional,Java 的 null 處理變得更加優(yōu)雅和簡(jiǎn)潔。希望這篇文章能幫助你更好地理解和使用這些特性。

到此這篇關(guān)于淺析Java中如何優(yōu)雅地處理null值的文章就介紹到這了,更多相關(guān)Java處理null值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot2啟動(dòng)時(shí)執(zhí)行,初始化(或定時(shí)任務(wù))servletContext問(wèn)題

    springboot2啟動(dòng)時(shí)執(zhí)行,初始化(或定時(shí)任務(wù))servletContext問(wèn)題

    這篇文章主要介紹了springboot2啟動(dòng)時(shí)執(zhí)行,初始化(或定時(shí)任務(wù))servletContext問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • java中Class.forName方法的作用詳解

    java中Class.forName方法的作用詳解

    Class.forName(xxx.xx.xx) 返回的是一個(gè)類,但Class.forName方法的作用到底是什么終?下面這篇文章就來(lái)給大家詳細(xì)介紹了關(guān)于java中Class.forName方法的作用,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-06-06
  • java實(shí)現(xiàn)全局監(jiān)聽(tīng)鍵盤詳解

    java實(shí)現(xiàn)全局監(jiān)聽(tīng)鍵盤詳解

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)全局監(jiān)聽(tīng)鍵盤的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下
    2024-01-01
  • Spring的BeanUtils.copyProperties屬性復(fù)制避坑指南

    Spring的BeanUtils.copyProperties屬性復(fù)制避坑指南

    這篇文章主要介紹了Spring的BeanUtils.copyProperties屬性復(fù)制避坑指南,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 詳解自定義SpringMVC的Http信息轉(zhuǎn)換器的使用

    詳解自定義SpringMVC的Http信息轉(zhuǎn)換器的使用

    這篇文章主要介紹了詳解自定義SpringMVC的Http信息轉(zhuǎn)換器的使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • java實(shí)現(xiàn)簡(jiǎn)單斗地主(看牌排序)

    java實(shí)現(xiàn)簡(jiǎn)單斗地主(看牌排序)

    這篇文章主要介紹了java實(shí)現(xiàn)簡(jiǎn)單斗地主,看牌進(jìn)行排序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2010-11-11
  • springboot中poi使用操作方法

    springboot中poi使用操作方法

    在項(xiàng)目中,有很多對(duì)excel的操作,大都數(shù)時(shí)候我們都會(huì)使用poi工具類,本文將介紹poi的一些使用方法,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • SpringBoot集成JPA的示例代碼

    SpringBoot集成JPA的示例代碼

    本篇文章主要介紹了SpringBoot集成JPA的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • RocketMQ?NameServer架構(gòu)設(shè)計(jì)啟動(dòng)流程

    RocketMQ?NameServer架構(gòu)設(shè)計(jì)啟動(dòng)流程

    這篇文章主要為大家介紹了RocketMQ?NameServer架構(gòu)設(shè)計(jì)啟動(dòng)流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Eclipse設(shè)置svn忽略文件或文件夾(svn:ignore)的操作

    Eclipse設(shè)置svn忽略文件或文件夾(svn:ignore)的操作

    這篇文章主要介紹了Eclipse設(shè)置svn忽略文件或文件夾(svn:ignore)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01

最新評(píng)論