6
我使用Scala的implicits定義了豐富的包裝器的Java接口:實現用Scala包裝的Java接口的工廠方法有什麼含義?
class RichThing { def richStuff: Unit = {} }
在同伴對象,我定義的隱式轉換和apply
工廠方法:
object RichThing {
implicit def rich(thing: JavaThing) = new RichThing()
def apply() = new RichThing()
}
有了這個,我可以實例化接口的Java實現並使用它,如RichThing
(由於隱式轉換):
new JavaThingImpl().richStuff
我還可以創建使用工廠方法(由於apply
法)RichThing
:
val a = RichThing()
我希望做的是實例化界面的任意的Java實現以同樣的方式。這不起作用,因爲斯卡拉然後查找實施的同伴對象,不能找到一個:
val b = JavaThingImpl() // "not found: value JavaThingImpl"
我可以創建Java實現Scala的同伴對象:
object JavaThingImpl { def apply() = new RichThing() }
但關鍵是要使這項工作適用於接口的任何(特別是未知的)實現。
有什麼辦法可以實現這個嗎?例如,基於RichThing
對象中的隱式轉換,爲Java實現即時創建Scala伴隨對象?
或者從Java端創建Scala伴侶對象,可能是抽象類?