在我們的開發中,NullPointerException可謂是隨時隨處可見,爲了避免空指針異常,我們常常需要進行一
些防禦式的檢查,所以在代碼中常常可見if(obj != null) 這樣的判斷。幸好在JDK1.8中,java爲我們提供了
一個Optional類,Optional類能讓我們省掉繁瑣的非空的判斷。下面先說一下Optional中爲我們提供的方法
方法 | 描述 |
---|---|
of | 把指定的值封裝爲Optional對象,如果指定的值爲null,則拋出NullPointerException |
empty | 創建一個空的Optional對象 |
ofNullable | 把指定的值封裝爲Optional對象,如果指定的值爲null,則創建一個空的Optional對象 |
get | 如果創建的Optional中有值存在,則返回此值,否則拋出NoSuchElementException |
orElse | 如果創建的Optional中有值存在,則返回此值,否則返回一個默認值 |
orElseGet | 如果創建的Optional中有值存在,則返回此值,否則返回一個由Supplier接口生成的值 |
orElseThrow | 如果創建的Optional中有值存在,則返回此值,否則拋出一個由指定的Supplier接口生成的異常 |
filter | 如果創建的Optional中的值滿足filter中的條件,則返回包含該值的Optional對象,否則返回一個空的Optional對象 |
map | 如果創建的Optional中的值存在,對該值執行提供的Function函數調用 |
flagMap | 如果創建的Optional中的值存在,就對該值執行提供的Function函數調用,返回一個Optional類型的值,否則就返回一個空的Optional對象 |
isPresent | 如果創建的Optional中的值存在,返回true,否則返回false |
ifPresent | 如果創建的Optional中的值存在,則執行該方法的調用,否則什麼也不做 |
下面我們寫幾個例子來具體看一下每個方法的作用:
of
//創建一個值爲張三的String類型的Optional
Optional<String> ofOptional = Optional.of("張三");
//如果我們用of方法創建Optional對象時,所傳入的值爲null,則拋出NullPointerException如下圖所示
Optional<String> nullOptional = Optional.of(null);
ofNullable
//爲指定的值創建Optional對象,如果傳入的值爲null,默認返回空的Optinal,不會報錯
Optional<String> nullOptional = Optional.ofNullable(null);
Optional<String> nullOptional = Optional.ofNullable("lisi");
empty
//創建一個空的String類型的Optional對象
Optional<String> emptyOptional = Optional.empty();
get
//如果創建的Optional對象中有值存在則返回此值,如果沒有值存在,則會拋出 NoSuchElementException異常
Optional<String> stringOptional = Optional.of("張三");
System.out.println(stringOptional.get());
orElse
//如果創建的Optional中有值存在,則返回此值,否則返回一個默認值
Optional<String> stringOptional = Optional.of("張三");
System.out.println(stringOptional.orElse("zhangsan"));
Optional<String> emptyOptional = Optional.empty();
System.out.println(emptyOptional.orElse("李四"));
orElseGet
如果創建的Optional中有值存在,則返回此值,否則返回一個由Supplier接口的實現類生成的值
Optional<String> emptyOptional = Optional.empty();
System.out.println(emptyOptional.orElseGet(() -> {
String str = "name";
return str;
}));