java.util.Optional類
1.理解:爲了解決java中的空指針問題而生!
Optional<T> 類(java.util.Optional) 是一個容器類,它能夠保存類型T的值,表明這個值存在。或者僅僅保存null
,表示這個值不存在。原來用 null 表示一個值不存在,如今 Optional 能夠更好的表達這個概念。而且能夠避
免空指針異常。java
2.經常使用方法:指針
@Test public void test1(){ //empty():建立的Optional對象內部的value = null Optional<Object> op1 = Optional.empty(); if(!op1.isPresent()){//Optional封裝的數據是否包含數據 System.out.println("數據爲空"); } System.out.println(op1); System.out.println(op1.isPresent()); //若是Optional封裝的數據value爲空,則get()報錯。不然,value不爲空時,返回value. // System.out.println(op1.get()); } @Test public void test2(){ String str = "hello"; // str = null; //of(T t):封裝數據t生成Optional對象。要求t非空,不然報錯。 Optional<String> op1 = Optional.of(str); //get()一般與of()方法搭配使用。用於獲取內部的封裝的數據value String str1 = op1.get(); System.out.println(str1); } @Test public void test3(){ String str = "beijing"; str = null; //ofNullable(T t) :封裝數據t賦給Optional內部的value。不要求t非空 Optional<String> op1 = Optional.ofNullable(str); //orElse(T t1):若是Optional內部的value非空,則返回此value值。若是 //value爲空,則返回t1. String str2 = op1.orElse("shanghai"); System.out.println(str2);// }
3.典型練習:
能保證以下的方法執行中不會出現空指針的異常。code
//使用Optional類的getGirlName(): public String getGirlName2(Boy boy){ Optional<Boy> boyOptional = Optional.ofNullable(boy); //此時的boy1必定非空 Boy boy1 = boyOptional.orElse(new Boy(new Girl("迪麗熱巴"))); Girl girl = boy1.getGirl(); Optional<Girl> girlOptional = Optional.ofNullable(girl); //girl1必定非空 Girl girl1 = girlOptional.orElse(new Girl("古力娜扎")); return girl1.getName(); } @Test public void test5(){ Boy boy = null; boy = new Boy(); boy = new Boy(new Girl("蒼老師")); String girlName = getGirlName2(boy); System.out.println(girlName); }