一、原因:
為避免nullPointException錯誤,一般都是進行顯示的!=null判斷,對于一些代碼嵌套比較深的代碼,會多出很多if-else,而且代碼的拓展性和可讀性較差。
二、使用方法
- 1、Optional類是對原有類的一次封裝
變量存在時,Optional類是對原有類的簡單封裝;變量不存在時是會返回Optional.empty() 空對象
注意:
1、Optional.empty()對象和NULL有著本質的區別,引用null會報錯,而引用Optional.empty()對象不會
2、Optional<T> 在語義上可以表示允許該類為空
- 2、Optional創建
// 創建空的Optional對象
Optional<T> optObj=Optional.empty()
//創建非空對象
Optional<T> optObj=Optional.of(T類對象實例)
// 創建可接受null的Optional
Optional<T> optObj=Optional.ofNullable(T類對象實例)
由于這種對象一般都會調用相應方法,Optional提供了相應的map和filter方法,返回都是Optional封裝的對象
注意:
如果方法返回值是Optional對象,又調用map方法,那最終得到的返回值為Optional<Optional<T>>類型
這種就不能連續使用map或者filter方法
解決:
使用flatMap方法,它會把多個Optional嵌套變成一個Optional對象
關于Optional 值得獲取方式,常用的方式有:
- 1、get() 為空時 會報錯,不建議 ,因為與Null基本一致
- 2、orElse(T other) 在對象不包含值時會提供一個默認值 建議
3、應用
用Optional 封裝可能為null的值,如
Object value=map.get("key");
Optional<Object> value=Optional.ofnullable(map.get("key"));