請參考原文:http://www.ibloger.net/article/3209.html
if(user!=null){ Address address = user.getAddress(); if(address!=null){ String province = address.getProvince(); } }
這種寫法是比較丑陋的,為了避免上述丑陋的寫法,讓丑陋的設計變得優雅。JAVA8提供了Optional類來優化這種寫法,接下來的正文部分進行詳細說明
實戰:
使用最多:

API介紹
1、Optional(T value),empty(),of(T value),ofNullable(T value)
這四個函數之間具有相關性,因此放在一組進行記憶。
先說明一下,Optional(T value)
,即構造函數,它是private權限的,不能由外部調用的。其余三個函數是public權限,供我們所調用。那么,Optional的本質,就是內部儲存了一個真實的值,在構造的時候,就直接判斷其值是否為空。好吧,這么說還是比較抽象。直接上Optional(T value)
構造函數的源碼,如下圖所示
2、orElse(T other),orElseGet(Supplier<? extends T> other)和orElseThrow(Supplier<? extends X> exceptionSupplier)
這三個函數放一組進行記憶,都是在構造函數傳入的value值為null時,進行調用的。orElse
和orElseGet
的用法如下所示,相當於value值為null時,給予一個默認值:
@Test public void test() { User user = null; user = Optional.ofNullable(user).orElse(createUser()); user = Optional.ofNullable(user).orElseGet(() -> createUser()); Object orElseGet = Optional.ofNullable(inss).orElseGet(()-> "sssssss"); } public User createUser(){ User user = new User(); user.setName("zhangsan"); return user; }