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

Kotlin中扩展org.jooq.Converter<Any?, Long?>的类型获取问题

Kotlin中获取Any?类型以实现JOOQ Converter的解决方案

你在实现org.jooq.Converter<Any?, Long?>时,重写fromType()方法遇到了类型获取问题——直接写Any?::class.java无法生效。

这是因为Kotlin的可空类型在JVM上没有独立的Class实例,Any?对应的JVM底层类型就是Any本身,正确的写法有两种:

写法一:显式类型转换

override fun fromType(): Class<Any?> = Any::class.java as Class<Any?>

写法二:利用泛型擦除特性

override fun fromType(): Class<Any?> = Any::class.java

虽然看起来返回的是Class<Any>,但JVM会擦除泛型信息,结合方法的返回类型声明Class<Any?>,编译器会接受该写法,运行时也能正常工作。

本质原因是JVM层面不区分可空与非可空类型,所有可空类型都会被处理为对应非可空类型的Class对象,因此只需获取Any::class.java,再适配方法的返回类型即可。

内容的提问来源于stack exchange,提问作者Karl Nordgren

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:22:33