Optional類是Java8的新特性,可以用來更優(yōu)雅的判空灵迫,處理null的問題秦叛。
- Optional類構(gòu)造方法是私有的,不能通過new創(chuàng)建對(duì)象瀑粥,不過提供了三個(gè)方法創(chuàng)建對(duì)象挣跋。
-
empty()
,創(chuàng)建一個(gè)空的Optional對(duì)象
Optional<String> empty = Optional.empty();
-
of()
狞换,把指定的值封裝為Optional對(duì)象避咆,不能為null
Optional<String> o = Optional.of("str");
//傳入null,會(huì)拋出NullPointerException
//Optional<String> o = Optional.of(null);
-
ofNullable()
修噪,把指定的值封裝為Optional對(duì)象查库,可以為null
Optional<Object> o1 = Optional.ofNullable(null);
- 常用方法
-
get()
,返回Optional對(duì)象封裝的值割按,空的Optional對(duì)象會(huì)拋出NoSuchElementException
Optional<String> o = Optional.of("str");
//s為"str"
String s = o.get();
-
isPresent()
膨报,如果創(chuàng)建的Optional中的值存在,返回true适荣,否則返回false
Optional<String> empty = Optional.empty();
Optional<String> o = Optional.of("str");
Optional<Object> o1 = Optional.ofNullable(null);
//true
boolean present0 = o.isPresent();
//false
boolean present = o1.isPresent();
//false
boolean present1 = empty.isPresent();
-
map()
现柠,如果創(chuàng)建的Optional中的值存在,對(duì)該值執(zhí)行提供的Function函數(shù)調(diào)用
Optional<String> empty = Optional.empty();
Optional<String> o = Optional.of("str");
Optional<Integer> integer = o.map(v -> v.length());
Optional<Integer> integer1 = empty.map(v -> v.length());
//true
boolean present2 = integer.isPresent();
//false
boolean present3 = integer1.isPresent();
-
orElse()
弛矛,如果創(chuàng)建的Optional中有值存在够吩,則返回此值,否則返回一個(gè)默認(rèn)值
Optional<String> empty = Optional.empty();
Optional<String> o = Optional.of("str");
//oElse為"str"丈氓,還是原來的值
String oElse = o.orElse("oElse");
//anElse 為"emptyElse"
String anElse = empty.orElse("emptyElse");
其他方法
方法 | 描述 |
---|---|
empty | 創(chuàng)建一個(gè)空的Optional對(duì)象 |
of | 把指定的值封裝為Optional對(duì)象周循,如果指定的值為null,則拋出NullPointerException |
ofNullable | 把指定的值封裝為Optional對(duì)象万俗,如果指定的值為null湾笛,則創(chuàng)建一個(gè)空的Optional對(duì)象 |
get | 如果創(chuàng)建的Optional中有值存在,則返回此值闰歪,否則拋出NoSuchElementException |
isPresent | 如果創(chuàng)建的Optional中的值存在嚎研,返回true,否則返回false |
ifPresent | 如果創(chuàng)建的Optional中的值存在库倘,則執(zhí)行該方法的調(diào)用临扮,否則什么也不做 |
map | 如果創(chuàng)建的Optional中的值存在,對(duì)該值執(zhí)行提供的Function函數(shù)調(diào)用 |
flagMap | 如果創(chuàng)建的Optional中的值存在教翩,就對(duì)該值執(zhí)行提供的Function函數(shù)調(diào)用杆勇,返回一個(gè)Optional類型的值,否則就返回一個(gè)空的Optional對(duì)象 |
orElse | 如果創(chuàng)建的Optional中有值存在饱亿,則返回此值蚜退,否則返回一個(gè)默認(rèn)值 |
orElseGet | 如果創(chuàng)建的Optional中有值存在闰靴,則返回此值,否則返回一個(gè)由Supplier接口生成的值 |
orElseThrow | 如果創(chuàng)建的Optional中有值存在关霸,則返回此值传黄,否則拋出一個(gè)由指定的Supplier接口生成的異常 |
filter | 如果創(chuàng)建的Optional中的值滿足filter中的條件,則返回包含該值的Optional對(duì)象队寇,否則返回一個(gè)空的Optional對(duì)象 |