Optional<T>類(java.util.Optional)是一個容器類,表明一個值存在或不存在,原來用null表示一個值不存在,如今Optional能夠更好的表達這個概念。而且能夠避免空指針異常。java
函數 | 描述 |
---|---|
Optional.of(T t) | 建立一個 Optional 實例 |
Optional.empty() | 建立一個空的 Optional 實例 |
Optional.ofNullable(T t) | 若 t 不爲 null,建立 Optional 實例,不然建立空實例 |
isPresent() | 判斷是否包含值 |
orElse(T t) | 若是調用對象包含值,返回該值,不然返回t |
orElseGet(Supplier s) | 若是調用對象包含值,返回該值,不然返回 s 獲取的值 |
map(Function f) | 若是有值對其處理,並返回處理後的Optional,不然返回 Optional.empty() |
flatMap(Function mapper) | 與 map 相似,要求返回值必須是Optional |
package www.muzi.com; import org.junit.Test; import www.muzi.com.model.Employee; import java.util.Optional; /* * 1、Optional 容器類:用於儘可能避免空指針異常 * Optional.of(T t) : 建立一個 Optional 實例 * Optional.empty() : 建立一個空的 Optional 實例 * Optional.ofNullable(T t):若 t 不爲 null,建立 Optional 實例,不然建立空實例 * isPresent() : 判斷是否包含值 * orElse(T t) : 若是調用對象包含值,返回該值,不然返回t * orElseGet(Supplier s) :若是調用對象包含值,返回該值,不然返回 s 獲取的值 * map(Function f): 若是有值對其處理,並返回處理後的Optional,不然返回 Optional.empty() * flatMap(Function mapper):與 map 相似,要求返回值必須是Optional */ public class TestOptional { // Optional.of(T t) : 建立一個 Optional 實例 @Test public void test1(){ Optional<Employee> op = Optional.of(new Employee()); Employee ep = op.get(); System.out.println(ep);//Employee{name='null', age=0} } //Optional.empty() : 建立一個空的 Optional 實例 @Test public void test2(){ Optional<Employee> op = Optional.empty(); Employee ep = op.get(); System.out.println(ep);//由於是空,因此不能獲取值:java.util.NoSuchElementException: No value present } //Optional.ofNullable(T t):若 t 不爲 null,建立 Optional 實例,不然建立空實例 @Test public void test3(){ Optional<Employee> op = Optional.ofNullable(new Employee("ee",23)); //isPresent() : 判斷是否包含值 /*if (op.isPresent()){ Employee ep = op.get(); System.out.println(ep);//Employee{name='null', age=0} }else{ System.out.println("op爲空"); }*/ Employee ep = op.orElse(new Employee("哈哈", 20)); System.out.println(ep);//Employee{name='ee', age=23} } //orElseGet(Supplier s) :若是調用對象包含值,返回該值,不然返回 s 獲取的值 @Test public void test4(){ Optional<Employee> op = Optional.ofNullable(null); Employee ep = op.orElseGet(() -> new Employee()); System.out.println(ep);//Employee{name='null', age=0} } //map(Function f): 若是有值對其處理,並返回處理後的Optional,不然返回 Optional.empty() @Test public void test5(){ Optional<Employee> op = Optional.ofNullable(new Employee("哈哈", 20)); Optional<String> name = op.map((e) -> e.getName()); System.out.println(name);//Optional[哈哈] } //flatMap(Function mapper):與 map 相似,要求返回值必須是Optional @Test public void test6(){ Optional<Employee> op = Optional.ofNullable(new Employee("哈哈", 20)); Optional<String> name = op.flatMap((e) -> Optional.of(e.getName())); System.out.println(name);//Optional[哈哈] } }