淺析Java中如何優(yōu)雅地處理null值
假設我們有一個學生對象,以及這個學生對象的 Optional 包裝器:
public class Student {
private String name;
private Integer age;
// 全參構造函數(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 并不能簡化原本繁瑣的 null 值檢查。例如:
// 編寫方法 1
if (student == null) {
return UNKNOWN_STUDENT;
} else {
return student;
}
// 編寫方法 2
if (!studentOpt.isPresent()) {
return UNKNOWN_STUDENT;
} else {
return studentOpt.get();
}只有將 Optional 與 Lambda 結(jié)合使用,才能發(fā)揮它真正的威力!
現(xiàn)在,讓我們對比一下 Java 8 中 Lambda + Optional 與傳統(tǒng) Java 在以下四種常見 null 處理場景中的差異。
場景 1:不為 null 則執(zhí)行
// if 語句
if (student!= null) {
System.out.println(student);
}
// Optional
studentOpt.ifPresent(System.out::println);
場景 2:不為 null 則返回,為 null 則返回特定值或拋出異常
// if 語句
if (student == null) {
return UNKNOWN_STUDENT; // 或拋出異常
} else {
return student;
}
// Optional
return studentOpt.orElse(UNKNOWN_STUDENT);
return studentOpt.orElseThrow(RuntimeException::new);場景 3:不為 null 則返回,為 null 則由調(diào)用方法
// if 語句
if (student == null) {
return UNKNOWN_STUDENT;
} else {
return generateWithFunction();
}
// Optional
return studentOpt.orElseGet(() -> generateWithFunction());場景 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);從以上四種場景可以明顯看出,Optional + Lambda 讓我們少寫了很多 if-else 代碼塊。尤其是場景 4,傳統(tǒng)的 Java 寫法顯得冗長且難以理解,而 Optional+Lambda 則簡潔明了,清晰易懂。
總結(jié)
通過結(jié)合 Lambda 表達式和 Optional,Java 的 null 處理變得更加優(yōu)雅和簡潔。希望這篇文章能幫助你更好地理解和使用這些特性。
到此這篇關于淺析Java中如何優(yōu)雅地處理null值的文章就介紹到這了,更多相關Java處理null值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Sentinel實現(xiàn)動態(tài)配置的集群流控的方法
這篇文章主要介紹了Sentinel實現(xiàn)動態(tài)配置的集群流控,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
Java使用pulsar-flink-connector讀取pulsar catalog元數(shù)據(jù)代碼剖析
這篇文章主要介紹了Java使用pulsar-flink-connector讀取pulsar catalog元數(shù)據(jù)代碼剖析,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08
Spring探秘之如何妙用BeanPostProcessor
BeanPostProcessor也稱為Bean后置處理器,它是Spring中定義的接口,在Spring容器的創(chuàng)建過程中會回調(diào)BeanPostProcessor中定義的兩個方法,這篇文章主要給大家介紹了關于Spring探秘之如何妙用BeanPostProcessor的相關資料,需要的朋友可以參考下2022-01-01
解決Java中SimpleDateFormat線程不安全的五種方案
SimpleDateFormat 就是一個典型的線程不安全事例,本文主要介紹了解決Java中SimpleDateFormat線程不安全的五種方案,需要的朋友們下面隨著小編來一起學習學習吧2021-05-05
鴻蒙PC上搭建多語言開發(fā)環(huán)境Java/Python/Go/Rust配置完全指南
對于鴻蒙開發(fā)者而言,一個正確配置的開發(fā)環(huán)境是所有后續(xù)工作的基石,下面這篇文章主要介紹了鴻蒙PC上搭建多語言開發(fā)環(huán)境Java/Python/Go/Rust配置的相關資料,需要的朋友可以參考下2026-05-05
spring?boot集成smart-doc自動生成接口文檔詳解
這篇文章主要介紹了spring?boot集成smart-doc自動生成接口文檔詳解,smart-doc是一款同時支持java?restful?api和Apache?Dubbo?rpc接口文檔生成的工具,smart-doc顛覆了傳統(tǒng)類似swagger這種大量采用注解侵入來生成文檔的實現(xiàn)方法2022-09-09
Java使用FileOutputStream寫Excel文件不落盤的解決方法
最近在寫 Java 代碼處理 Excel 文件的時候,遇到了一個挺頭疼的問題:使用 Apache POI 的 XSSFWorkbook.write(FileOutputStream) 方法寫文件,生成的 Excel 文件卻打不開,所以本文就給大家介紹了Java使用FileOutputStream寫Excel文件不落盤的解決方法2025-11-11

