Play2隐式写入</t>中的<t>

时间:2013-08-29 19:06:06

标签: scala playframework playframework-2.0

我在使用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中如何/如何实现这两个参数?

1 个答案:

答案 0 :(得分:1)

您通常可以获得一个对象的实例:Foobar$.MODULE$
和嵌套的一样:Foobar.Format$.MODULE$

这里的伴侣对象存在问题,因为它被编译为不同的类。它将创建一个名为Foobar$的类,它不属于Foobar类型,也不会扩展FoobarParent。所以你不能只是致电publish(Foobar$.MODULE$, Foobar.Format$.MODULE$);。我想你只需要创建一个新实例:

publish(new Foobar("..."), Foobar.Format$.MODULE$);