【问题标题】:Play2 Implicit Writes<T> in JavaJava 中的 Play2 隐式写入<T>
【发布时间】:2013-08-30 07:32:31
【问题描述】:

我在从 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 中实现这两个参数?

【问题讨论】:

    标签: scala playframework playframework-2.0


    【解决方案1】:

    您通常可以像这样获取对象的实例:Foobar$.MODULE$
    嵌套的像这样:Foobar.Format$.MODULE$

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

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

    【讨论】:

    • 谢谢,看来我的 IDE 对 Foobar.Format$.MODULE$ 很满意
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多