Scala使用Jooq向PostgreSQL插入数组字段遇类型转换异常求解决
解决Scala List[Long]转数组导致ClassCastException的问题
问题根源
Scala中List[Long].toArray默认会生成基本类型long[],而jOOQ需要的是包装类型Long[](属于Object[]子类),直接传入会触发类型转换异常。
可行解决办法
显式指定数组类型:调用
toArray时传入包装类型的数组模板,强制生成Long[]:val dimensionCodesArray: Array[Long] = dimensionCodes.toArray(new Array[Long](0))或者直接指定泛型参数:
val dimensionCodesArray: Array[Long] = dimensionCodes.toArray[Long]借助Java集合转换:通过Scala的Java集合转换器转成Java
List<Long>,再调用其toArray方法生成包装类型数组:import scala.jdk.CollectionConverters._ val dimensionCodesArray: Array[Long] = dimensionCodes.asJava.toArray(new Array[Long](0))手动构建数组:遍历List元素构建包装类型数组(适合小批量数据):
val dimensionCodesArray: Array[Long] = Array.tabulate(dimensionCodes.size)(i => dimensionCodes(i))
这些方法都能确保生成Long[]数组,适配jOOQ的参数要求,避免ClassCastException。
内容的提问来源于stack exchange,提问作者Capacytron
相关产品推荐
相关产品推荐

