Optional
Java 最大的敵人, 我想應該就是 NPT Exception, tears.
所以 Java8 設計了一個 Optional
用來解決 NPT 這淘氣的小東西, fuck.
詳細的使用方式
參閱這個 bloger 的介紹, 寫的超棒, 我覺得啦 :)
JpaRepository
Spring framework 做 CRUD 的好朋友, 就是 JpaRepository
,
沒有用 Optional 的寫法像這樣
@Repository
public interface UserInfoRepository extends JpaRepository<UserInfo, String> {
UserInfo findByName(String name);
}
這樣寫其實也沒什麼不合理, 只是在商業邏輯處理時, 要多一個 if
判斷,
判斷是否有查詢到 userInfo 的資料.
public void business() {
UserInfo user = userInfoRepository.findByName("dumdum");
if (Objects.isNull(user)) {
// throw exception
} else {
// do something
}
}
改為用 Optional 試試看
@Repository
public interface UserInfoRepository extends JpaRepository<UserInfo, String> {
Optional<Userinfo> findByName(String name);
}
public void business() {
Optional<Userinfo> userOpt = userInfoRepository.findByName("dumdum");
UserInfo user = userOpt.orElseThrow(() ->
new Exception("查無 userInfo(dumdum) 資訊."));
// do something
}
這樣寫感覺好多了, 另一方面也可以清楚的明白 Exception 是什麼原因產生的
找不到 user 還可以替換為預設 user, 這樣就不用處理 Exception,
當然並不是所有的情境都可以預設一個 instance.
public void business() {
Optional<Userinfo> userOpt = userInfoRepository.findByName("dumdum");
UserInfo user = userOpt.orElse(new UserInfo("預設 user")));
// do something
}
沒有留言:
張貼留言