Java中getClass()与Kotlin中javaClass转码报错及解决问询
解决Java转Kotlin时createCsv函数的两个问题
1. 替代Java的row.getClass()
Java里的row.getClass()在Kotlin中等价的正确写法是row::class.java,这才能获取到Jackson需要的Java Class对象:
- 若
row是非空类型(如Any),直接写row::class.java即可 - 若
row是可空类型(如Any?),需先处理空值,示例:row?.let { it::class.java } ?: throw IllegalArgumentException("Row cannot be null")
你之前尝试的row.javaClass.kotlin得到的是Kotlin的KClass对象,并非Jackson所需的Java Class;simpleName只是类名字符串,自然无法替代Class对象。
2. 修复Jackson convertValue的类型问题
Jackson不存在convertValue(Any, Any)的重载,自动转换时出现的Any是类型推断错误导致的。你需要明确传入目标类型的Java Class对象,和Java逻辑保持一致:
比如原Java代码:
SomeTargetType result = mapper.convertValue(row, SomeTargetType.class);
转成Kotlin应为:
val result = mapper.convertValue(row, SomeTargetType::class.java)
如果是泛型类型(如List<SomeTargetType>),则需要使用TypeReference:
val result = mapper.convertValue(row, object : TypeReference<List<SomeTargetType>>() {})
内容的提问来源于stack exchange,提问作者JonathanSessenioo
相关产品推荐
相关产品推荐

