kotlin将对象转换为map_在 Kotlin 的 data class 中使用 MapStruct
原文:https://zhuanlan.zhihu.com/p/208525542
一. data class 的 copy() 為淺拷貝
淺拷貝是按位拷貝對象,它會創建一個新對象,這個對象有著原始對象屬性值的一份精確拷貝。如果屬性是基本類型,拷貝的就是基本類型的值;如果屬性是內存地址(引用類型),拷貝的就是內存地址 ,因此如果其中一個對象改變了這個地址,就會影響到另一個對象。
深拷貝會拷貝所有的屬性,并拷貝屬性指向的動態分配的內存。當對象和它所引用的對象一起拷貝時即發生深拷貝。深拷貝相比于淺拷貝速度較慢并且花銷較大。
data class 的 copy() 是復制函數,能夠復制一個對象的全部屬性,也能復制部分的屬性。
例如下面的代碼:
image.png
執行結果:
image.png
user1.address===user2.address 打印的結果是 true 表示二者內存地址相同。 如果對象內部有引用類型的變量,通過拷貝后二者指向的是同一地址,表示為淺拷貝。所以 data class 的 copy 為淺拷貝。
本文接下來要介紹的不是深拷貝,但跟深拷貝會有一些關系,是 Java Bean 到 Java Bean 的之間的映射。這樣類似的工具有:Apache 的 BeanUtils、Dozer、MapStruct 等等。
二. MapStruct 簡介
MapStruct 是一個基于JSR269的 Java 注釋處理器。開發者只需要定義一個 Mapper 接口,該接口聲明任何所需的映射方法。在編譯期間 MapStruct 將生成此接口的實現類。
使用 MapStruct 可以在兩個 Java Bean 之間實現自動映射的功能,只需要創建好接口。由于它是在編譯時自動創建具體的實現,因此無需反射等開銷,在性能上也會好于 Apache 的 BeanUtils、Dozer 等。
三. Kotlin 中使用 MapStruct
在 github 上找到了一個 MapStruct Kotlin 實現的開源項目:https://github.com/Pozo/mapstruct-kotlin
3.1 mapstruct-kotlin 的安裝:
添加 kapt 插件
image.png
然后在項目中添加如下依賴:
image.png
另外,還需要添加如下依賴:
image.png
3.2 mapstruct-kotlin 的基本使用
對于需要使用 MapStruct 的 data class,必須加上一個@KotlinBuilder注解
image.png
通過添加@KotlinBuilder注解會在編譯時生成 UserBuilder、UserDtoBuilder 對象,他們在 Mapper 的實現類中被使用,用于創建對象以及對對象的賦值。
再定義一個 Mapper:
image.png
這樣,就可以使用了。MapStruct 會在編譯時自動生成好 UserMapperImpl 類,完成將 User 對象轉換成 UserDto 對象。
image.png
執行結果:
image.png
3.3 mapstruct-kotlin 的復雜應用
對于稍微復雜的類:
image.png
Person 類中還包含有 Role 類,以及 Person 跟 PersonDto 的屬性并不完全一致的情況。在 Mapper 接口中,支持使用@Mappings來做映射。
image.png
在 PersonMapper 的 toDto() 中,對于 PersonDto 沒有的屬性,在 Mapping 時可以使用ignore = true。
下面來看看,將 person 映射成 personDto,以及 personDto 再映射回 person。
image.png
執行結果:
image.png
由于 Person 沒有 phone 這個屬性并且在 Mapping 時忽略了,因此轉換成 PersonDto 后personDto.phone=null。
而 PersonDto 雖然有 age 屬性,但是在 Mapping 時忽略了,因此轉換成 Person 后personFromDto.age=0。
這樣的結果達到了我們的預期。
總結
在使用 Kotlin 的 data class 時,如果需要做 Java Bean 之間的映射,使用 MapStruct 是一個很不錯的選擇。
更多深入的java知識點可以來我的java學習群:1080621881 。
總結
以上是生活随笔為你收集整理的kotlin将对象转换为map_在 Kotlin 的 data class 中使用 MapStruct的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 制作好pe的u盘怎么重装系统 如何用制作
- 下一篇: 自己用u盘安装系统怎么安装系统盘 使用U