關(guān)于Java8新特性O(shè)ptional類的詳細解讀
一、Optional類的出現(xiàn)
到目前為止,臭名昭著的空指針異常
是導致Java應用程序失敗的最常見原因。以前,為了解決空指針異常,Google公司著名的Guava項目引入了Optional類,Guava通過使用檢查空值的方式來防止代碼污染,它鼓勵程序員寫更干凈的代碼。受到Google Guava的啟發(fā),Optional類已經(jīng)成為Java 8類庫的一部分。
二、Optional類概述
Optional 類(java.util.Optional)是一個容器類,它可以保存類型T的值,代表這個值存在?;蛘邇H僅保存null,表示這個值不存在。原來用 null 表示一個值不存在,現(xiàn)在Optional 可以更好的表達這個概念。并且可以避免空指針異常。
Optional類的Javadoc描述如下:這是一個可以為null的容器對象
。如果值存在則 isPresent() 方法會返回 true,調(diào)用 get() 方法會返回該對象。
三、Optional類常用方法
1. 創(chuàng)建Optional類對象的方法
方法 | 描述 |
Optional.of(T t) | 創(chuàng)建一個 Optional 實例,t必須非空 |
Optional.empty() | 創(chuàng)建一個空的 Optional 實例 |
Optional.ofNullable(T t) | t可以為nul |
2. 判斷Optional容器中是否包含對象
方法 | 描述 |
boolean isPresent() | 判斷是否包含對象 |
void ifPresent(Consumer<? super T> consumer) | 如果有值,就執(zhí)行Consumer接口的實現(xiàn)代碼,并且該值會作為參數(shù)傳給它。 |
3. 獲取Optional容器的對象
方法 | 描述 |
T get() | 如果調(diào)用對象包含值,返回該值,否則拋異常 |
T orElse(T other) | 如果有值則將其返回,否則返回指定的other對象 |
T orElseGet(Supplier<? extends T> other) | 如果有值則將其返回,否則返回由Supplier接口實現(xiàn)提供的對象 |
T orElseThrow(Supplier<? extends X> exceptionSupplier) | 如果有值則將其返回,否則拋出由Supplier接口實現(xiàn)提供的異常 |
四、代碼演示
@Test public void test1() { Boy b = new Boy("張三"); Optional<Girl> opt = Optional.ofNullable(b.getGrilFriend()); // 如果女朋友存在就打印女朋友的信息 opt.ifPresent(System.out::println); } @Test public void test2() { Boy b = new Boy("張三"); Optional<Girl> opt = Optional.ofNullable(b.getGrilFriend()); // 如果有女朋友就返回他的女朋友,否則只能欣賞“嫦娥”了 Girl girl = opt.orElse(new Girl("嫦娥")); System.out.println("他的女朋友是:" + girl.getName()); } @Test public void test3(){ Optional<Employee> opt = Optional.of(new Employee("張三", 8888)); //判斷opt中員工對象是否滿足條件,如果滿足就保留,否則返回空 Optional<Employee> emp = opt.filter(e -> e.getSalary()>10000); System.out.println(emp); } @Test public void test4(){ Optional<Employee> opt = Optional.of(new Employee("張三", 8888)); //如果opt中員工對象不為空,就漲薪10% Optional<Employee> emp = opt.map(e -> {e.setSalary(e.getSalary()%1.1);return e;}); System.out.println(emp); }
到此這篇關(guān)于關(guān)于Java8新特性O(shè)ptional類的詳細解讀的文章就介紹到這了,更多相關(guān)Java8Optional類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Tomcat啟動分析(我們?yōu)槭裁匆渲肅ATALINA_HOME環(huán)境變量)
本文主要介紹Tomcat啟動分析的知識,這里整理了相關(guān)資料及分析原因和如何實現(xiàn)的方法,有興趣的小伙伴可以參考下2016-09-09java.util.concurrent.ExecutionException 問題解決方法
這篇文章主要介紹了java.util.concurrent.ExecutionException 問題解決方法的相關(guān)資料,需要的朋友可以參考下2016-11-11SpringBoot超詳細講解@Enable*注解和@Import
這篇文章主要介紹了SpringBoot?@Enable*注解和@Import,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07SSH框架網(wǎng)上商城項目第29戰(zhàn)之使用JsChart技術(shù)顯示商品銷售報表
這篇文章主要為大家詳細介紹了SSH框架網(wǎng)上商城項目第29戰(zhàn)之使用JsChart技術(shù)顯示商品銷售報表,感興趣的小伙伴們可以參考一下2016-06-06Java實現(xiàn)多線程輪流打印1-100的數(shù)字操作
這篇文章主要介紹了Java實現(xiàn)多線程輪流打印1-100的數(shù)字操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08關(guān)于eclipse中運行tomcat提示端口被占用的4種解決
這篇文章主要介紹了關(guān)于eclipse中運行tomcat提示端口被占用的4種解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01