如何解决play-json OWrites 用于 trait 中由同名对象实现的类
slick 生成代码的时候是这样的(sample1/Tables.scala):
package sample1
object Tables extends {
val profile = ???
} with Tables
trait Tables {
case class Class1Row(num: Int)
}
我只想使用 play-json 转储 db 对象,所以我需要 OWrites(在 sample1/X.scala 中):
package sample1
import play.api.libs.json.{Json,Writes}
object X {
implicit val class1Writes: Writes[Tables.Class1Row] = Json.writes[Tables.Class1Row]
}
编译时报错:
sample1/X.scala:6:68
type mismatch;
found : Tables.this.Class1Row => Option[Int]
required: sample1.Tables.Class1Row => Option[Int]
implicit val class1Writes: Writes[Tables.Class1Row] = Json.writes[Tables.Class1Row]
为什么我已经在 val 赋值的两边指定了相同的类型,为什么会出现编译问题?
解决方法
在谷歌上搜索了更多(几个小时)后,发现这是一个没有修复的已知问题。
https://github.com/playframework/playframework/issues/4598 已关闭。 https://github.com/slick/slick/issues/1382 目前正在营业。
我现在通过使用从 slick 的代码生成器扩展而来的自定义代码生成器解决了这个问题,该生成器将案例类置于 trait 之外,根据:Custom Slick Codegen generate mapped case classes outside the `${container} trait`?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。