我想将一些“数据”类对象转换/映射为类似的“数据”类对象。例如,Web 表单类到数据库记录类。
data class PersonForm(
val firstName: String,
val lastName: String,
val age: Int,
// maybe many fields exist here like address, card number, etc.
val tel: String
)
// maps to ...
data class PersonRecord(
val name: String, // "${firstName} ${lastName}"
val age: Int, // copy of age
// maybe many fields exist here like address, card number, etc.
val tel: String // copy of tel
)
我在 Java 中使用 ModelMapper 进行此类工作,但它不能使用,因为数据类是最终的(ModelMapper 创建 CGLib 代理来读取映射定义)。当我们打开这些类/字段时,我们可以使用 ModelMapper,但我们必须手动实现“数据”类的功能。(参见 ModelMapper 示例:https ://github.com/jhalterman/modelmapper/blob/master/examples/src/main/java/org/modelmapper/gettingstarted/GettingStartedExample.java )
如何在 Kotlin 中映射此类“数据”对象?
更新: ModelMapper 自动映射具有相同名称的字段(如 tel -> tel),无需映射声明。我想用 Kotlin 的数据类来做。
更新: 每个类的用途取决于什么样的应用程序,但这些可能被放置在应用程序的不同层中。
例如:
- 从数据库(数据库实体)到 HTML 表单数据(模型/视图模型)的数据
- REST API 结果到数据库的数据
这些类是相似的,但并不相同。
由于这些原因,我想避免正常的函数调用:
- 这取决于参数的顺序。具有许多具有相同类型(如字符串)的字段的类的函数将很容易被破坏。
- 尽管大多数映射可以通过命名约定来解决,但许多声明是必要的。
当然,想要一个具有类似功能的库,但也欢迎 Kotlin 功能的信息(如在 ECMAScript 中传播)。