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

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

如何使用Java中的Optional

瀏覽:22日期: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久久,三上悠亚国产精品一区二区三区
欧美aa在线视频| 人人爱人人干婷婷丁香亚洲| 亚洲精品美女91| 六月丁香综合| 免费观看在线综合| 视频在线观看一区| 一区二区不卡| 91精品国产一区二区在线观看| 亚洲精品少妇| 日本视频在线一区| **爰片久久毛片| 911精品国产| 久久精品免费看| 久久精品三级| 国产精品av久久久久久麻豆网| 国产精品porn| 国产aⅴ精品一区二区四区| 国产成人久久精品一区二区三区| 久久久久久网| 女同性一区二区三区人了人一| 午夜欧美在线| 国产欧美日韩精品高清二区综合区| 里番精品3d一二三区| 久久蜜桃资源一区二区老牛| 宅男在线一区| 日韩国产欧美在线播放| 奇米777国产一区国产二区| 久久久国产精品网站| 久久国产日韩| 亚洲美女91| 国产精品国码视频| 99久久亚洲精品蜜臀| 亚洲人成毛片在线播放女女| 国产视频一区二| 九色porny丨国产首页在线| 国产精品视区| 国产中文字幕一区二区三区| 久久亚洲专区| 国产精品www.| 伊人久久亚洲美女图片| 国产精品一区二区99| 欧美 日韩 国产精品免费观看| 午夜在线播放视频欧美| 麻豆国产一区| 国产亚洲一区在线| 欧美日韩中文| 亚洲午夜久久久久久尤物| 久久激情综合网| 99成人在线| 一本大道色婷婷在线| 久久精品导航| 久久精品国产免费| 日韩国产在线一| 成人羞羞视频在线看网址| 国产日韩一区二区三区在线播放| 久久国产亚洲| 另类专区亚洲| 麻豆国产精品| 日本成人中文字幕| 首页亚洲欧美制服丝腿| 日韩欧美精品一区| 国产一区二区三区不卡视频网站| 国产精品亚洲综合在线观看| 日韩精品一级中文字幕精品视频免费观看 | 伊人久久成人| 欧美肉体xxxx裸体137大胆| 欧美日韩亚洲一区三区| 欧美日韩免费观看一区=区三区| 91精品一区国产高清在线gif| 免费高潮视频95在线观看网站| 岛国av在线网站| 精品捆绑调教一区二区三区| 成人看片网站| 影视先锋久久| 国产视频一区在线观看一区免费| 欧美日韩精品免费观看视频完整| 在线亚洲免费| 日本国产欧美| 国产日产高清欧美一区二区三区| 国产精品免费99久久久| 久久久久免费| 国产精品91一区二区三区| 一区二区精品| 国产伊人久久| 亚洲自拍另类| 欧美黄色一区二区| 亚洲午夜91| 国产精品一区2区3区| а√天堂中文在线资源8| 亚洲黄页一区| 国产日韩在线观看视频| 蜜桃精品在线| 亚洲精品观看| 精品久久久久久久| 亚洲欧美日韩专区| 精品欧美日韩精品| 日韩亚洲国产欧美| 精品九九久久| 亚洲精品在线国产| 成人精品中文字幕| 国产乱子精品一区二区在线观看| 国产精品字幕| 国产精品17p| 日韩欧美在线中字| 国产欧美一区二区精品久久久| 日韩精品一区二区三区免费观看| 日韩欧美久久| 亚洲男女av一区二区| 日韩黄色在线观看| 亚洲精品91| 久久久久中文| 中文字幕在线官网| 国产精品一区三区在线观看| 伊人久久婷婷| 91精品蜜臀一区二区三区在线| 国产欧美一区二区三区精品观看 | 欧美日韩精品免费观看视完整 | 日韩中文av| 丝袜亚洲精品中文字幕一区| 亚洲不卡系列| 欧美aa在线观看| 久久精品女人| 国产精品探花在线观看| 亚洲精品免费观看| 蜜桃一区二区三区在线| 欧美在线观看视频一区| 日韩不卡视频在线观看| 亚洲精品成人图区| 高清av一区| 国产日韩欧美三区| 精品一区二区三区亚洲| 国产日韩亚洲欧美精品| 久久精品99国产精品| 国产三级精品三级在线观看国产| 日本91福利区| 国产亚洲人成a在线v网站| 欧美一级网址| 精品中文在线| 日韩一区欧美| 欧美成人久久| 蜜桃久久久久久| 亚洲精选91| 国产精品日韩精品中文字幕| 青青国产91久久久久久| 国产精品多人| 色婷婷狠狠五月综合天色拍| 久久精品亚洲欧美日韩精品中文字幕| 久久精品国语| 日本不卡一二三区黄网| 国产精品一区二区三区www| 91综合网人人| 久久xxxx| 97久久亚洲| 日韩精品专区| 日本在线不卡视频| 超碰99在线| 日本不卡高清| 免费福利视频一区二区三区| 99视频一区| 免费在线播放第一区高清av| 久久狠狠婷婷| 欧美一级一区| 欧美日韩激情在线一区二区三区| 亚洲精品九九| 欧美日韩国产一区二区三区不卡| 欧美私人啪啪vps| 精品日韩毛片| 精品精品国产三级a∨在线| 日韩在线播放一区二区| 成人一区不卡| 91欧美精品| 亚洲色诱最新| 国产欧洲在线| 国产黄色一区| 热久久国产精品| 久久精品影视| 国产精品v亚洲精品v日韩精品| 欧美日韩国产一区精品一区| 国产精品99久久精品| 日韩va亚洲va欧美va久久| 午夜欧美精品久久久久久久| 久久亚洲精精品中文字幕| 亚洲午夜国产成人| 国产精品美女久久久浪潮软件| 国产福利一区二区精品秒拍| 免费成人av在线播放| 在线视频观看日韩| 欧美日韩免费观看视频| 欧美黄页在线免费观看| 国产精品视频一区视频二区| 日韩欧美久久| 欧美资源在线| 狠狠干综合网| 欧美日韩一区二区综合| 精品亚洲美女网站| 99精品在线观看| 99日韩精品| 日韩不卡在线观看日韩不卡视频| 亚洲精品婷婷| 欧美激情在线精品一区二区三区|