Optional 是什麼?
Optional 是值的容器,
只有兩種狀態,
不是有值就是沒值
將輸入的值產生為 Optional
物件,
這時 Optional
物件即為該值的容器,
若要取回該值,
必須使用 get()
方法
將值轉為 Optional 的方法
of()
: 接受非 null 的值
並回傳Optional
物件ofNullable()
: 可以接受null 的值
, 回傳Optional
物件
取得放在 Optional 物件內的值的方法
get()
: 如果值存在就回傳這個值, 否則就丟出NoSuchElementException
orElse(T other)
: 如果值存在就回傳這個值, 否則回傳other
orElseGet(Supplier<? extends T> other)
: 如果值存在就回傳這個值, 否則就呼叫other
並回傳它的結果orElseThrow(Supplier<? extends X> exceptionSupplier)
: 如果值存在就回傳這個值, 否則就丟出由exceptionSupplier
建立的例外
常用範例
在 Repository
可以直接用 Optional
,
這樣就可以避免資料庫互動時回 null
造成錯誤:
public interface DemoRepository extends JpaRepository<DemoEntity, String> {
Optional<DemoEntity> findByGuid(String guid);
}
在 Service
就可以依照以下方法使用它:
@RequiredArgsConstructor
@Service
@Slf4j
public class DemoService {
@Autowired
private DemoRepository demoRepository;
public GuidRs getGuidDetail(GuidRq param) {
GuidRs guidRs = new GuidRs();
// 利用 Optional 承接資料庫沒有這個值為 null
var optEntity = demoRepository.findByGuid(param.getGuid());
// 再用 isPresent() 方法判斷是否為 null
if (optEntity.isPresent()) {
// get() 可以取得 Optional 裡的物件
DemoEntity temp = optEntity.get();
guidRs.setSomething(temp.getSomething());
}
return guidRs;
}
}
參考資料
看原文文檔可以學更多喔!
Optional 更多用法