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

Scala访问另一文件中case class时jsonFormat2报类型不匹配问题

报错原因

你当前使用的是Spray JSON或兼容其API的Scala JSON序列化库,jsonFormatN系列方法要求传入case class的构造方法函数引用,你直接传入伴生对象MyData,编译器识别到的是伴生对象的独有类型MyData.type,和要求的双参数函数类型不匹配,因此抛出类型错误。

解决方法

两种写法都可以修复问题:

  1. 引用伴生对象自带的apply构造方法(case class默认会生成和主构造参数列表一致的apply方法,只要你没有在伴生对象里覆盖同签名的apply即可使用)
implicit val dataFormat = jsonFormat2(MyData.apply)
  1. 直接传入匿名构造函数引用,兼容性更好,不受自定义apply方法影响
implicit val dataFormat = jsonFormat2(new MyData(_, _))
注意事项
  • jsonFormat后的数字必须和case class主构造方法的参数数量完全匹配,比如3个参数就要用jsonFormat3
  • 如果你使用的是Play JSON、Circe等其他Scala JSON库,序列化Format的生成语法不同,但核心逻辑都是要传入构造方法的函数引用,不能直接传伴生对象本身。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:45:00