Scala操作MongoDB调用getList获取Seq[Int]字段出现类型转换异常如何解决
异常原因
- 语法使用错误:
Int.getClass获取的是ScalaInt类型伴生对象scala.Int$的Class实例,并非你期望的整数元素类型的Class,和驱动返回的元素类型完全不匹配。 - 类型匹配错误:MongoDB Scala驱动反序列化BsonInt32类型的数组元素时,默认返回的是Java装箱类型
java.lang.Integer,无法直接强制转换为Scala的值类型Int。
修复方案
首先导入Scala与Java集合的互转工具类:
// Scala 2.12+ 推荐使用该互转工具,旧版本可替换为 scala.collection.JavaConverters._ import scala.jdk.CollectionConverters._
将原读取groups的代码替换为如下写法即可:
val groups = n.getList("groups", classOf[java.lang.Integer]).asScala.map(_.toInt).toSeq
该代码执行逻辑如下:
- 传入
classOf[java.lang.Integer]指定正确的元素类型,匹配驱动反序列化BsonInt32的返回类型 - 通过
asScala方法将Java List转换为Scala集合 - 遍历元素调用
toInt将Java装箱类型Integer转为Scala值类型Int - 最终转为
Seq[Int]类型返回,符合Scala常规使用习惯
内容的提问来源于stack exchange,提问作者user7429643
相关产品推荐
相关产品推荐

