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でこれら2つのパラメーターを何/どのように満たすのですか?

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 に答える