我有一个参数化案例类CaseClass[T](name: String, t: T)
,我想使用 play-json (2.5) 对其进行序列化/反序列化。
当然,如果我没有 type 的等价物,我就不能拥有这个T
,所以我定义
object CaseClass {
implicit def reads[T: Reads] = Json.reads[CaseClass[T]]
}
但我收到以下编译器错误:
overloaded method value apply with alternatives:
[B](f: B => (String, T))(implicit fu: play.api.libs.functional.ContravariantFunctor[play.api.libs.json.Reads])play.api.libs.json.Reads[B] <and>
[B](f: (String, T) => B)(implicit fu: play.api.libs.functional.Functor[play.api.libs.json.Reads])play.api.libs.json.Reads[B]
cannot be applied to ((String, Nothing) => CaseClass[Nothing])
如果我尝试对Json.writes
宏执行相同操作,则会收到错误消息
type mismatch;
found : CaseClass[Nothing] => (String, Nothing)
required: CaseClass[T] => (String, T)
最令人惊讶的是,当我使用Json.format
宏时,两个错误都没有发生。
我知道我有不同的解决方案来绕过这个问题(使用Json.format
,手动编写我的(反)序列化器,......),但我很好奇为什么会在这里发生。