淺析Java中如何優(yōu)雅地處理null值
假設(shè)我們有一個學(xué)生對象,以及這個學(xué)生對象的 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 并不能簡化原本繁瑣的 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 表達(dá)式和 Optional,Java 的 null 處理變得更加優(yōu)雅和簡潔。希望這篇文章能幫助你更好地理解和使用這些特性。
到此這篇關(guān)于淺析Java中如何優(yōu)雅地處理null值的文章就介紹到這了,更多相關(guān)Java處理null值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用BufferedReader讀取TXT文件中數(shù)值,并輸出最大值
這篇文章主要介紹了使用BufferedReader讀取TXT文件中數(shù)值,并輸出最大值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
Java Scanner類用法及nextLine()產(chǎn)生的換行符問題實例分析
這篇文章主要介紹了Java Scanner類用法及nextLine()產(chǎn)生的換行符問題,結(jié)合實例形式分析了Scanner類功能、hasNextInt()和nextInt()方法使用及nextLine()產(chǎn)生的換行符問題解決方法,需要的朋友可以參考下2019-03-03
編寫調(diào)用新浪微博API的Java程序來發(fā)送微博
這篇文章主要介紹了編寫調(diào)用新浪微博API的Java程序來發(fā)送微博的方法,只是展示了一個基本的程序框架而非一個完整的圖形化軟件:)需要的朋友可以參考下2015-11-11
Java判斷object對象為空(包括null ,““)的方法
這篇文章主要介紹了Java判斷對象是否為空(包括null ,“”)的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12
Spring+SpringMVC+MyBatis深入學(xué)習(xí)及搭建(三)之MyBatis全局配置文件解析
這篇文章主要介紹了Spring+SpringMVC+MyBatis深入學(xué)習(xí)及搭建(三)之MyBatis全局配置文件解析,需要的朋友可以參考下2017-05-05

