我在使用Java调用我的Scala代码时遇到了一些问题。
这是我的Scala类:
case class Foobar(foo: String) extends FoobarParent
object Foobar {
implicit object Format extends Format[Foobar] {
def writes(Foobar: foobar): JsValue = {
....
}
implicit def reads(json: JsValue): JsResult[Foobar] = {
...
}
}
}
现在我有一个带有以下签名的方法:
def publish[T <: FoobarParent](foobarParent: T)(implicit writes: Writes[T]): Unit = {...}
从Scala代码调用时这很好用,我只是做publish[Foobar] (Foobar(...))
然而在Java中,签名在我的IDE中看起来像这样:
publish (T FoobarParent, Writes<T> writes)
现在我的问题是我在Java中如何/如何实现这两个参数?
答案 0 :(得分:1)
您通常可以获得一个对象的实例:Foobar$.MODULE$
和嵌套的一样:Foobar.Format$.MODULE$
这里的伴侣对象存在问题,因为它被编译为不同的类。它将创建一个名为Foobar$
的类,它不属于Foobar
类型,也不会扩展FoobarParent
。所以你不能只是致电publish(Foobar$.MODULE$, Foobar.Format$.MODULE$);
。我想你只需要创建一个新实例:
publish(new Foobar("..."), Foobar.Format$.MODULE$);