【发布时间】:2018-08-10 22:44:39
【问题描述】:
我遇到了伴随对象选择其类型而不是案例类的问题
我正在使用喷雾 json serdes。他们需要一个隐式的 JsonFormat。这个格式是通过调用一个依赖于case类的参数个数的函数得到的:jsonFormat2(Class2) if case class有两个字段,比如
case class Class2(a: String, b: Integer)
或 jsonFormat3(Class3) 为
case class Class3(a: String, b: Integer, c: Long)
鉴于必须知道案例类在整个代码中具有的参数数量并不好,我想创建一个案例类伴随对象,以便您可以封装此信息并从类本身获取 JsonFormat,例如:
object Class2 extends DefaultJsonProtocol
{
def getJsonFormat() = {
jsonFormat2(Class2)
}
}
但是如果我这样做,我会得到以下编译问题:
type mismatch;
[error] found : mypackage.Class2.type
[error] required: (?, ?) => ?
[error] jsonFormat2(Class2)
如果我们看jsonFormat2中的代码,签名是:
def jsonFormat2[P1 :JF, P2 :JF, T <: Product :ClassManifest
(construct: (P1, P2) => T): RootJsonFormat[T] = { // ...
如果我更改伴生对象名称(例如更改为 MyClass2),它将正常工作。所以,似乎类型是冲突的。
似乎在处理打字时,伴生对象无法像它们所使用的类一样命名。
有人可以解释为什么会发生这种情况,如果有限制,或者如何解决这个问题,所以伴生对象可以使用相同的名称吗?
【问题讨论】:
-
你的意思是
jsonFormat2(Class2.apply)?
标签: scala types spray-json companion-object