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

4

1 回答 1

1

你通常可以像这样得到一个对象的实例:Foobar$.MODULE$
和这样的嵌套实例:Foobar.Format$.MODULE$

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

publish(new Foobar("..."), Foobar.Format$.MODULE$);
于 2013-08-29T23:32:31.137 回答