You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 16:14:51