I have following definitions:
case class MyData(id: String, name: String)
object MyData {
....
}
These are in same Scala file.
How can I now access case class in another Scala file? When I try to do something like following in another Scala file:
implicit val dataFormat = jsonFormat2(MyData)
...I get error: Type mismatch, found MyData.type
CodePudding user response:
To elaborate on @jwvh's answer, if you don't define a companion object for a case class, the compiler-generated companion object (part of the case class magic) will express the presence of the apply method in its type, that is to say, for MyData
object MyData extends Function2[String, String, MyData]
This allows the bare companion object to be used in contexts expecting a function, e.g. to Spray's jsonFormat2.
If you define a companion object for the case class yourself, that part of the case class magic is suppressed (though the compiler still generates the apply method unless the case class is abstract), so you can either:
- Duplicate that bit of compiler magic yourself (see above)
- Partially-apply the
applycall to turn it into a function as in
jsonFormat2(MyData.apply(_, _))
