对Java的实现工厂方法接口方面采用斯卡拉implicits包裹?
题
我使用的Scala implicits定义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
我还可以创建使用工厂方法的RichThing
(由于apply
法):
val a = RichThing()
我想要做的就是实例化界面的任意的Java实现以同样的方式。这不起作用,因为斯卡拉然后查找实施的同伴对象,不能找到一个:
val b = JavaThingImpl() // "not found: value JavaThingImpl"
我可以为Java实现创建Scala的同伴对象:
object JavaThingImpl { def apply() = new RichThing() }
但重点将是使任何这项工作(尤其是未知)接口的实现。
有什么办法来实现这一点?例如,创建在运行中的Java实现斯卡拉同伴对象,基于RichThing
对象的隐式转换?
或者创建从Java侧Scala的同伴对象,也许在一个抽象类?
解决方案
没有,这是不可能的Scala中。或许,这将有可能将其添加到语言又不损害型稳健,但我质疑额外的复杂性是否将是值得的。
不隶属于 StackOverflow