我正在为java.io.File
编写一个简单的JSON序列化程序,只需加强路径:
import java.io.File
import play.api.libs.json._
import Implicits.File._
object Implicits {
object File {
implicit val format: Format[File] = new Format[File] {
override def writes(o: File): JsValue = JsString(o.toString)
override def reads(js: JsValue): JsResult[File] = js.validate[String].map(f => new File(f))
}
}
}
final case class Bar(path: File)
object Bar {
implicit val format: Format[Bar] = Json.format
}
我发现上述情况不起作用:
No instance of play.api.libs.json.Format is available for java.io.File in the implicit scope
但是,如果我将Implicit.File.format
的名称更改为Implicit.File.fmt
,则可以正常使用。
为什么名称在这种情况下会碰到隐式范围解析器应该关注的类型,Format[File]
?
我正在使用play-json 2.6.7。
答案 0 :(得分:1)
为什么名称在这种情况下会碰到隐式范围解析器应该关注的类型
y.columns = ['a', 'b', 'c', 'd', 'f']
?
因为它也关心这个名字。
在第Format[File]
行,implicit val format: Format[Bar] = Json.format
表示format
而不是Bar.format
,因此Implicits.File.format
不符合此规则的隐含条件。并且它不在同伴对象中,所以它也不被第二类覆盖。