Kotlin Spring Boot中使用ModelMapper实现对象转换的正确写法
问题原因
你碰到的编译报错是因为Kotlin和Java获取类字面量的语法存在差异:
- Java中使用
类名.class获取类的Class实例 - Kotlin中不存在该语法,直接套用会触发
Name expected、Expecting ')'的编译错误
正确实现方式
Kotlin中获取Java类的Class实例需要两步:
- 用
类名::class拿到Kotlin的KClass类型引用 - 调用
KClass的.java扩展属性,拿到Java互操作所需的java.lang.Class实例,匹配ModelMapper的map方法参数类型
对应转换函数的正确写法如下:
// 引入ModelMapper依赖后即可使用 class ConvertService { // 假设modelMapper已经通过构造注入/手动初始化完成 private val modelMapper = ModelMapper() fun convertToTest(another: AnotherTest): Test { return modelMapper.map(another, Test::class.java) } }
你定义的两个测试类
Test、AnotherTest中同名字段name、size会被ModelMapper自动映射,AnotherTest独有的id字段因为Test中不存在对应属性,转换时会自动忽略,不会抛出异常。
可选优化:通用转换扩展
如果项目中大量使用ModelMapper做对象转换,可以封装一个通用内联扩展函数,省去每次手动传类型引用的重复代码:
import org.modelmapper.ModelMapper // 全局初始化/注入的ModelMapper实例 val modelMapper = ModelMapper() inline fun <reified T> Any.convertTo(): T { return modelMapper.map(this, T::class.java) } // 业务代码中直接调用即可,类型自动推断 fun convertToTest(another: AnotherTest): Test { return another.convertTo() }
内容的提问来源于stack exchange,提问作者rajeshp222
相关产品推荐
相关产品推荐

