日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

如何使用Java中的Optional

瀏覽:26日期:2022-08-20 11:33:13

NullPointerException是非常常見的異常。由于它,程序往往需要大量使用if-else代碼塊來處理空值,這使得代碼看起來不簡潔 優雅 ,且不方便自己和他人閱讀。本文介紹如何用Optional類來處理null值問題。

Optional類

先來看一段代碼:

String isocode = user.getAddress().getCountry().getIsocode().toUpperCase();

這段代碼在任何一個方法調用時,都有可能拋出NullPointerException。而通常我們的處理方式是不斷地利用if代碼塊來確保上一步的值不為空并執行下一步代碼。

if (user != null) { Address address = user.getAddress(); if (address != null) { Country country = address.getCountry(); if (country != null) { String isocode = country.getIsocode(); if (isocode != null) {isocode = isocode.toUpperCase(); } } }}

嗯,一股切割器cutter的味道。

Optional類是Java8為了解決null值判斷問題,借鑒google guava類庫的Optional類而引入的一個同名Optional類,使用Optional類可以避免顯式的null值判斷(null的防御性檢查),避免null導致的NPE(NullPointerException)。

如何創建Optional實例

Optional類沒有公共構造函數。 但是確提供了三個靜態方法在不同情形下根據需求創建Optional實例。

Optional.of()

這個方法要求你傳入一個不為空的值(不一定是引用類型,也可以是原始類型),所以下面這種寫法還是會拋出一個NullPointerException異常:

Optional.of(null);

可見Optional并不能完全避免NullPointerException,關鍵在于你是否正確以及規范地使用它。但大多數情況下,我們使用Optional正是由于無法確定值是否為空。在這種情況下,我們使用下面這個方法。

Optional.ofNullable()

這個方法允許你傳入空值或者非空值。

Optional.empty()

這個方法會返回一個包裝空值的Optional實例。也許你會覺得它會有點雞肋(我一開始也是這么認為的)。考慮以下代碼:

int dividend = 10, divisor = 0;int result = dividend / divisor;Optional<Integer> o = Optional.of(result);

顯然它會在運行期拋出ArithmeticException異常,這使得后續對于o的可能存在的操作因異常而終止。

改寫如下:

int dividend = 10, divisor = 0;Optional<Integer> o;try { int result = dividend / divisor; o = Optional.of(result);} catch (ArithmeticException e) { o = Optional.empty();}

訪問Optional實例的值get()

它的源碼:

public T get() { if (value == null) { throw new NoSuchElementException('No value present'); } return value;}

當Optional實例包裝的是一個空值時,它會拋出NoSuchElementException。

所以在調用get()方法前我們還是需要判斷Optional是否包裝空值。使用ifPresent()方法來判斷其包裝的是否是空值:

public static String getGender(Student student) { Optional<Student> stuOpt = Optional.ofNullable(student); if(stuOpt.isPresent()) { return stuOpt.get().getGender(); } return 'Unkown'; }

而這其實是一種很糟糕的寫法,因為這種用法不但沒有減少null的防御性檢查,而且增加了Optional包裝的過程,違背了Optional設計的初衷,因此開發中要避免這種糟糕的使用。 下文會介紹相對更好的寫法。

獲取默認值

Optional提供了兩種方法來返回默認值。

orElse()

orElse()會在Optional有值時返回它的值,否則就會返回傳入的默認值。

public class Main { public static void main(String[] args) { System.out.println(getGender(null)); }public static String getGender(Student student) { Student stuOpt = Optional.ofNullable(student).orElse(new Student(); return stuOpt.getGender(); }}

orElseGet()

orElseGet()則稍有不同,它會在Optional有值時返回其值,否則就會執行作為參數傳入的Supplier實例的get()方法,并返回其執行結果。

public class Main { public static void main(String[] args) { System.out.println(getGender(null)); }public static String getGender(Student student) { Student stuOpt = Optional.ofNullable(student).orElseGet(Student::new); return stuOpt.getGender(); }}

兩者的不同之處

orElse()是EAGER的,也就是說無論Optional的值是否為空,它都會執行。 orElseGet()是LAZY的,只有當Optional的值為空時,才會執行。

由于由以上差異,我們要根據業務場景謹慎選擇,尤其是涉及服務調用或數據查詢等耗時操作時。

以上就是如何使用Java中的Optional的詳細內容,更多關于Java中的Optional的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美亚洲tv| 综合日韩av| 亚洲黄色在线| 亚洲一级网站| 亚洲男女自偷自拍| 欧美日韩国产在线一区| 在线综合亚洲| 亚洲综合中文| 国产精品草草| 欧美sm一区| 视频一区免费在线观看| 欧美日韩中出| 欧美激情另类| 国产亚洲午夜| 国产日本久久| 香蕉成人av| 免费在线欧美视频| 国产精品久久久久9999高清 | 亚洲精品一级| 国产欧美日韩亚洲一区二区三区| 久久精品欧洲| 欧美日韩黑人| 欧美视频精品全部免费观看| 精品国产亚洲日本| 九色精品91| 欧美日韩午夜电影网| 韩国精品主播一区二区在线观看| 99国产成+人+综合+亚洲欧美| 日韩**一区毛片| sm久久捆绑调教精品一区| 亚洲精品一区二区妖精| 欧美自拍一区| 亚洲女同中文字幕| 欧美激情aⅴ一区二区三区| 久久久国产亚洲精品| 免费在线观看成人| av资源中文在线| 日韩中文一区二区| 日韩精品欧美| 国产精品亲子伦av一区二区三区| 99久久精品网| 国产精品巨作av| 中文亚洲欧美| 在线看片福利| 欧美一区自拍| 水蜜桃久久夜色精品一区的特点| 成人精品高清在线视频| 亚洲综合五月| 999国产精品| 国产午夜精品一区在线观看| 欧美日韩在线网站| 精品国产乱码久久久久久樱花| 首页国产欧美日韩丝袜| 亚洲1234区| 久久婷婷国产| 日韩av一区二区在线影视| 在线成人动漫av| 精品72久久久久中文字幕| 日韩专区视频网站| 日韩视频精品在线观看| 成人国产精品| 久久99免费视频| 日本亚洲不卡| 性色一区二区| 日韩精品首页| 老牛影视精品| 精品国产乱码久久久久久樱花| 日韩精品第二页| 久久国产88| 亚洲深爱激情| 久久久久久久久久久9不雅视频| 久久精品免视看国产成人| 婷婷精品在线| 亚洲视频电影在线| 亚洲免费网址| 蜜桃伊人久久| 日韩中文字幕91| 先锋影音国产一区| 噜噜噜久久亚洲精品国产品小说| 亚洲成av在线| 日韩精品永久网址| yellow在线观看网址| 福利一区二区免费视频| 久久久免费人体| 精品日韩一区| 捆绑调教日本一区二区三区| 久久久久久自在自线| 精品三级在线| 日韩深夜视频| 99久久亚洲精品| 亚洲成人日韩| 久久电影一区| 日韩**一区毛片| 久久国产免费看| 青青国产91久久久久久| 欧美永久精品| 国产精品日本一区二区不卡视频| 久久不见久久见国语| 欧美精品91| 中文一区一区三区高中清不卡免费| 色婷婷综合网| 久久国产小视频| 午夜在线视频一区二区区别| 亚洲欧美在线综合| 91精品麻豆| 国产一区二区色噜噜| 欧美男人天堂| 亚洲美洲欧洲综合国产一区| 中文字幕免费精品| 欧美在线不卡| 久久中文欧美| 99tv成人| 羞羞答答国产精品www一本| 爽好久久久欧美精品| 日本h片久久| 精品免费在线| 午夜国产一区二区| 97久久精品| 国产自产自拍视频在线观看| 黄色亚洲免费| 久久狠狠久久| 久久人人精品| 日韩中文字幕无砖| 综合日韩av| 免费在线视频一区| 国产日韩欧美| 亚洲天堂资源| 一区二区国产在线| 美女高潮久久久| 午夜国产欧美理论在线播放| 日韩一区二区三区高清在线观看| 国产激情精品一区二区三区| 亚洲啊v在线| 在线看片一区| 激情久久99| 日韩网站在线| 精品美女在线视频| 麻豆9191精品国产| 激情综合五月| 免费在线观看视频一区| 久久香蕉精品香蕉| 久久av在线| 国产精品黑丝在线播放| 日韩中文字幕不卡| 美女av在线免费看| 亚洲ww精品| 在线一区视频观看| 日韩av午夜在线观看| 麻豆精品蜜桃| 国产亚洲字幕| 99国产精品久久久久久久成人热| 国产乱码精品一区二区三区四区 | 日本aⅴ精品一区二区三区| 首页国产精品| 日韩激情综合| 亚洲一级特黄| 蜜桃精品视频| 亚洲另类视频| 欧美日中文字幕| 你懂的国产精品| 久久亚洲不卡| 日韩综合精品| 国产精品亚洲综合久久| 日韩视频精品在线观看| 色爱综合网欧美| 国产欧美一区二区三区国产幕精品 | 国产精品激情电影| 99视频精品| 九九精品调教| 麻豆一区二区三区| 日韩精品乱码av一区二区| 欧美精品自拍| 狠狠躁少妇一区二区三区| 国产欧美日韩一级| 在线国产精品一区| 欧美精品一卡| 日韩高清欧美| 国产一区二区三区四区| 日韩二区三区在线观看| 日韩中文字幕亚洲一区二区va在线| 国产精品毛片一区二区在线看| 日韩精品免费一区二区夜夜嗨| 亚洲专区欧美专区| 国产一区日韩一区| 另类中文字幕国产精品| 岛国av在线网站| 国产一区二区三区日韩精品| 欧美一区精品| 视频精品一区| 视频一区二区三区中文字幕| 亚洲一级高清| 激情欧美国产欧美| 日韩中文在线播放| 91精品韩国| 久久精品二区亚洲w码| 国产精品毛片aⅴ一区二区三区| 97精品国产99久久久久久免费| 亚洲毛片在线| 综合亚洲色图| 视频一区中文字幕精品|