使用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套件函式
- Z 函式(擴充套件KMP)函式套件KMP
- Kotlin擴充套件函式與屬性原理解析Kotlin套件函式
- es6-函式擴充套件函式套件
- 擴充套件表示式套件
- 淺談Kotlin語法篇之擴充套件函式(五)Kotlin套件函式
- spring bean 擴充套件方式SpringBean套件
- HIVE自定義函式的擴充套件Hive函式套件
- [開發效率]Kotlin之擴充套件Kotlin套件
- Spring擴充套件介面(4):InstantiationAwareBeanPostProcessorSpring套件Bean
- Spring擴充套件介面(2):BeanDefinitionRegistryPostProcessorSpring套件Bean
- Spring擴充套件之二:ApplicationListenerSpring套件APP
- Spring IoC 容器的擴充套件Spring套件
- Spring容器擴充套件機制Spring套件
- JMeter擴充套件開發:自定義函式JMeter套件函式
- PHP的SPL擴充套件庫(四)函式PHP套件函式
- ES6之函式的擴充套件函式套件
- PHP的Sodium加密擴充套件函式了解PHP加密套件函式
- SpringMVC 擴充套件SpringMVC套件
- Mybatis擴充套件MyBatis套件
- 擴充套件工具套件
- Sanic 擴充套件套件
- ORACLE 擴充套件Oracle套件
- JMeter 擴充套件開發:擴充套件 TCP 取樣器JMeter套件TCP
- 學習PHP中統計擴充套件函式的使用PHP套件函式
- Solon詳解(六)- Solon的校驗擴充套件框架使用與擴充套件套件框架
- ASP.NET Core擴充套件庫之Http通用擴充套件ASP.NET套件HTTP
- ?用Chrome擴充套件管理器, 管理你的擴充套件Chrome套件
- P5410 【模板】擴充套件 KMP(Z 函式)套件KMP函式
- PHP的Mhash擴充套件函式的學習PHP套件函式
- 使用cython擴充套件python庫套件Python
- 使用ctypes來擴充套件Python套件Python
- Source insight擴充套件宏使用套件