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伴侣对象,可能是抽象类?