2013-08-29 58 views
0

我有一些問題從Java調用我的Scala代碼。Play2 Implicit Writes <T> in Java

這裏是我的斯卡拉類:

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

通常你可以得到一個對象的實例是這樣的:Foobar$.MODULE$
和嵌套一個這樣的:Foobar.Format$.MODULE$

還有這裏的同伴對象有問題,但因爲它被編譯成不同的類。它將創建一個名爲Foobar$的類,它不是Foobar類型,也不是FoobarParent。所以你不能只打電話publish(Foobar$.MODULE$, Foobar.Format$.MODULE$);。我認爲你只需要創建一個新實例:

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

謝謝,看起來像我的IDE滿足Foobar.Format $ .MODULE $ –