摘要:在中被定義為一個容器類,更確切的說只存一個元素的容器。類結構屬性類中包含兩個屬性類屬性對象屬性屬性用來存放一個為的對象。提高編碼人員對對象重視以及對象時的特殊處理。個人覺得沒有實質性杜絕問題,造成的主要原因是數據不完整性。
Optional在JAVA中被定義為一個容器類,更確切的說只存一個元素的容器。
Optional類結構 Optional屬性container object which may or may not contain a non-null value.
Optional類中包含兩個屬性:
類屬性:EMPTY
對象屬性:value
EMPTY屬性用來存放一個value為null的Optional對象。
value屬性用來存放非null對象。
Optional的有兩個構造方法,都被private修飾。
private Optional() { this.value = null; } private Optional(T value) { this.value = Objects.requireNonNull(value); }
無參構造方法用來初始化EMPTY。有參構造方法用來初始化非null對象。
因為構造方法被修飾為私有的,Optional想要實例化對象只能通過類方法調用。Optional提供三個類方法。
empty:返回value為null的Optional對象
of:返回value非null的Optional對象
ofNullable:value的值根據參數是否為null返回對應的Optional對象
public staticOptional empty() { Optional t = (Optional ) EMPTY; return t; } public static Optional of(T value) { return new Optional<>(value); } public static Optional ofNullable(T value) { return value == null ? empty() : of(value); }
實例方法介紹
方法 | 參數類型 | 返回類型 | 說明 | |
---|---|---|---|---|
get | 無 | T | value為null拋出NoSuchElementException異常 | |
isPresent | 無 | boolean | value為null則返回false | |
ifPresent | Consumer super T> | void | 如果Optional實例有值則為其調用consumer,否則不做處理 | |
filter | Predicate super T> | Optional |
如果值存在并且滿足提供的謂詞,就返回包括該值的Optional對象;否則返回一個空的Optional對象 | |
map | Function super T, ? extends U> | Optional | 如果值存在,就對該值執行提供的mapping函數調用,返回Optional對象 | |
flatMap | Function super T, Optional> | Optional | 如果值存在,就對該值執行提供的mapping函數調用,返回非null Optional對象 | |
orElse | T | T | 如果有值則將其返回,否則返回一個默認值 | |
orElseGet | Supplier extends T> | T | 如果有值則將其返回,否則返回一個由指定的Supplier接口生成的值 | |
orElseThrow | Supplier extends X> | 如果有值則將其返回,否則拋出一個由指定的Supplier接口生成的異常 |
Optional類為我們做了什么呢?
代碼中可以省去了ifelse對null對象的判斷。
提高編碼人員對null對象重視以及null對象時的特殊處理。
個人覺得Optional沒有實質性杜絕NPE問題,造成NullPointerException的主要原因是數據不完整性。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70728.html
摘要:在目前的工作中,我對中的和表達式都使用得很多,之前也寫了兩篇文章來總結對應的知識。為了避免,他們會加很多判斷語句,使得代碼的可讀性變得很差。在后面的開發中,可以使用設計,這樣可以設計出更安全的接口和方法。 showImg(https://upload-images.jianshu.io/upload_images/44770-dfeb2d48d3779723.jpg?imageMogr...
摘要:實踐很簡單的一個類,點開它的源代碼,其中所有的方法都是與相關聯的。從而很好地避免了空指針異常。方法,如果存在,返回包含的值,否則拋出異常。隨便點開一個方法,都會在第一行為不該為的參數進行判斷。 問題描述 在大熱的Spring Boot 2.0中,在將原來的泛型改為了Optional,旨在讓我們的代碼更簡潔。 showImg(https://segmentfault.com/img/bV...
摘要:本文已收錄修煉內功躍遷之路的為解決空的問題帶來了很多新思路,查看源碼,實現非常簡單,邏輯也并不復雜。 本文已收錄【修煉內功】躍遷之路 showImg(https://segmentfault.com/img/bVbrCvp?w=852&h=480); Java8的Optional為解決空的問題帶來了很多新思路,查看Optional源碼,實現非常簡單,邏輯也并不復雜。Stuart Ma...
摘要:函數副作用會給程序設計帶來不必要的麻煩,引入潛在的,并降低程序的可讀性。所以只能采用這種曲線救國的方式。則是把這種曲線救國拿到了臺面上,并昭告天下,同時還對提供了一些語法支持。是自由變量,提供執行上下文,觸發閉包執行。 背景 自從2013年放棄了Java就再也沒有碰過。期間Java還發布了重大更新:引入lambda,但是那會兒我已經玩了一段時間Scala,對Java已經瞧不上眼。相比S...
閱讀 3573·2021-09-24 09:48
閱讀 1095·2021-09-10 10:51
閱讀 3276·2019-08-30 13:03
閱讀 3324·2019-08-30 12:51
閱讀 1393·2019-08-30 11:22
閱讀 1061·2019-08-29 18:38
閱讀 2040·2019-08-29 16:41
閱讀 3202·2019-08-29 15:32