摘要:上一篇我們詳細介紹了函數式接口中主要的一些方法使用,本篇介紹的雖然并不是一個函數式接口,但是也是一個極其重要的類。并不是我們之前介紹的一系列函數式接口,它是一個,主要作用就是解決中的。
上一篇我們詳細介紹了Predicate函數式接口中主要的一些方法使用,本篇介紹的Optional雖然并不是一個函數式接口,但是也是一個極其重要的類。
Optional并不是我們之前介紹的一系列函數式接口,它是一個class,主要作用就是解決Java中的NPE(NullPointerException)。空指針異常在程序運行中出現的頻率非常大,我們經常遇到需要在邏輯處理前判斷一個對象是否為null的情況。
if(null != person){ Address address = person.getAddress(); if(null != address){ ...... } }
實際開發中我們經常會按上面的方式進行非空判斷,接下來看下使用Optional類如何避免空指針問題
String str = "hello"; Optionaloptional = Optional.ofNullable(str); optional.ifPresent(s -> System.out.println(s));//value為hello,正常輸出
首先,ofNullable方法接收一個可能為null的參數,將參數的值賦給Optional類中的成員變量value,ifPresent方法接收一個Consumer類型函數式接口實例,再將成員變量value交給Consumer的accept方法處理前,會校驗成員變量value是否為null,如果value是null,則什么也不會執行,避免了空指針問題。下方是ifPresent源碼
/** * If a value is present, invoke the specified consumer with the value, * otherwise do nothing. * * @param consumer block to be executed if a value is present * @throws NullPointerException if value is present and {@code consumer} is * null */ public void ifPresent(Consumer super T> consumer) { if (value != null) consumer.accept(value); }
如果傳入的內容是空,則什么也不會執行,也不會有空指針異常
String str = null; Optionaloptional = Optional.ofNullable(str); optional.ifPresent(s -> System.out.println(s));//不會輸出任何內容
如果為空時想返回一個默認值
String str = null; Optionaloptional = Optional.ofNullable(str); System.out.println(optional.orElseGet(() -> "welcome"));
orElseGet方法接收一個Supplier,還記得前面介紹的Supplier么,不接受參數通過get方法直接返回結果,類似工廠模式,上面代碼就是針對傳入的str變量,如果不為null那正常輸出,如果為null,那返回一個默認值"welcome"
orElseGet方法源碼
/** * Return the value if present, otherwise invoke {@code other} and return * the result of that invocation. * * @param other a {@code Supplier} whose result is returned if no value * is present * @return the value if present otherwise the result of {@code other.get()} * @throws NullPointerException if value is not present and {@code other} is * null */ public T orElseGet(Supplier extends T> other) { return value != null ? value : other.get(); }
下一篇
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70703.html
摘要:基礎問題的的性能及原理之區別詳解備忘筆記深入理解流水線抽象關鍵字修飾符知識點總結必看篇中的關鍵字解析回調機制解讀抽象類與三大特征時間和時間戳的相互轉換為什么要使用內部類對象鎖和類鎖的區別,,優缺點及比較提高篇八詳解內部類單例模式和 Java基礎問題 String的+的性能及原理 java之yield(),sleep(),wait()區別詳解-備忘筆記 深入理解Java Stream流水...
摘要:基礎問題的的性能及原理之區別詳解備忘筆記深入理解流水線抽象關鍵字修飾符知識點總結必看篇中的關鍵字解析回調機制解讀抽象類與三大特征時間和時間戳的相互轉換為什么要使用內部類對象鎖和類鎖的區別,,優缺點及比較提高篇八詳解內部類單例模式和 Java基礎問題 String的+的性能及原理 java之yield(),sleep(),wait()區別詳解-備忘筆記 深入理解Java Stream流水...
摘要:基礎問題的的性能及原理之區別詳解備忘筆記深入理解流水線抽象關鍵字修飾符知識點總結必看篇中的關鍵字解析回調機制解讀抽象類與三大特征時間和時間戳的相互轉換為什么要使用內部類對象鎖和類鎖的區別,,優缺點及比較提高篇八詳解內部類單例模式和 Java基礎問題 String的+的性能及原理 java之yield(),sleep(),wait()區別詳解-備忘筆記 深入理解Java Stream流水...
閱讀 2972·2021-09-22 15:18
閱讀 3395·2019-08-30 15:54
閱讀 3274·2019-08-30 15:53
閱讀 589·2019-08-30 14:12
閱讀 815·2019-08-29 17:01
閱讀 2199·2019-08-29 14:04
閱讀 1379·2019-08-29 13:09
閱讀 862·2019-08-26 17:40