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

Kotlin中如何使用jOOQ DSL生成可移植的空数组[]

在Kotlin中使用jOOQ生成跨方言兼容的空数组SQL

针对你遇到的问题,这里有几种可行的解决方案:

1. 显式指定类型并传递空vararg参数

Kotlin调用Java的vararg方法时,可通过显式指定类型+展开空数组的方式解决重载歧义问题:

// 生成跨方言的空数组SQL
DSL.array<Any>(*emptyArray())

这种写法会明确匹配接收vararg values的重载,生成等价于array[]的SQL。如果需要特定类型的空数组,替换Any为对应类型即可,比如字符串类型:

DSL.array<String>(*emptyArray())

2. 使用jOOQ 3.17+新增的emptyArray()方法

从jOOQ 3.17版本开始,官方提供了直接生成空数组的API:

// 生成任意类型的空数组(需指定类型)
DSL.emptyArray(Any::class.java)

// 生成特定类型的空数组,比如字符串类型
DSL.emptyArray(String::class.java)

这个方法是专门为生成空数组设计的,完全兼容各种SQL方言,是最优解。

为什么你之前的写法无效?

  • DSL.array():两个重载方法签名匹配度一致,Kotlin无法自动推断调用哪个,导致歧义报错。
  • DSL.array(null as Any?):会生成包含一个null元素的数组,而非空数组。
  • DSL.array(emptyList<Any>()):将空列表作为单个元素传入,生成的是包含空列表的数组(即array[[]]),不是目标空数组。

内容的提问来源于stack exchange,提问作者Gavin Ray

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:15:40