使用Kotlin擴充套件函式擴充套件Spring Data案例
在使用Spring Data和 Kotlin 時,您可能已經注意到預設findById返回一個Optional<T>. 這篇超短文將向您展示如何利用 Kotlin擴充套件函式來自定義此邏輯。
Optional在 Java 8 中引入作為處理可空性的解決方案。它充當可能包含值的容器,使您免於使用null來表示可選定義。
Kotlin 使用不同的方法解決這個問題:null-safe。
Kotlin擴充套件函式允許您使用附加功能擴充套件類,而無需使用裝飾器或直接訪問修改類。當您想向第三方庫新增東西時,它們會非常有用,就好像該函式是庫的一部分一樣。
Spring Data 在 2.1.4 中新增了一個擴充套件函式來CrudRepository呼叫findByIdOrNull. 但是,此方法在其他一些介面中不起作用,例如JpaSpecificationExecutor.
這是我用來包裝JpaSpecificationExecutor的一個findOne方法:
/** * By default [JpaSpecificationExecutor.findOne] returns an Optional. This extension function wraps it to return a nullable instead. */ fun <T> JpaSpecificationExecutor<T>.findOneOrNull(specification: Specification<T>): T? = findOne(specification) .orElse(null) |
通過定義這個擴充套件函式,我現在可以完全繞過Optional並直接使用可為空的返回值:
// Finding a single user using a specification val filteredUser = userRepository.findOne(specification).orElseThrow { UserNotFoundException() } // Finding a single user using a specification with nullable val filteredUser = userRepository.findOneOrNull(specification) ?: throw UserNotFoundException() |
相關文章
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- Kotlin擴充套件函式Kotlin套件函式
- Kotlin-常用擴充套件函式Kotlin套件函式
- Kotlin基礎 — 擴充套件函式Kotlin套件函式
- Kotlin的幾個擴充套件函式Kotlin套件函式
- Kotlin委託 & 擴充套件 & 高階函式Kotlin套件函式
- Kotlin 常見內聯擴充套件函式的使用Kotlin套件函式
- Z 函式(擴充套件KMP)函式套件KMP
- 奇技淫巧之Kotlin 擴充套件函式(一)Kotlin套件函式
- 擴充套件表示式套件
- es6-函式擴充套件函式套件
- Kotlin擴充套件函式與屬性原理解析Kotlin套件函式
- WCF擴充套件:行為擴充套件Behavior Extension套件
- HIVE自定義函式的擴充套件Hive函式套件
- 淺談Kotlin語法篇之擴充套件函式(五)Kotlin套件函式
- spring bean 擴充套件方式SpringBean套件
- Sanic 擴充套件套件
- ORACLE 擴充套件Oracle套件
- 擴充套件工具套件
- 擴充套件歐幾里得套件
- DOM擴充套件套件
- 擴充套件ACL套件
- Lua擴充套件套件
- 照片擴充套件套件
- 擴充套件篇套件
- disable or 擴充套件套件
- 擴充套件表套件
- Mybatis擴充套件MyBatis套件
- PDF 擴充套件包使用套件
- [開發效率]Kotlin之擴充套件Kotlin套件
- ES6之函式的擴充套件函式套件
- PHP的Sodium加密擴充套件函式了解PHP加密套件函式
- JMeter擴充套件開發:自定義函式JMeter套件函式
- PHP的SPL擴充套件庫(四)函式PHP套件函式
- JMeter 擴充套件開發:擴充套件 TCP 取樣器JMeter套件TCP
- Spring IoC 容器的擴充套件Spring套件
- Spring容器擴充套件機制Spring套件