java 基本語法(十九)Optional類的使用

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);

}
相關文章
相關標籤/搜索