Fab*_*eeg 6 java jvm factory scala implicit
我正在使用Scala implicits为Java接口定义一个丰富的包装器:
class RichThing { def richStuff: Unit = {} }
Run Code Online (Sandbox Code Playgroud)
在伴侣对象中,我定义了隐式转换和apply工厂方法:
object RichThing {
implicit def rich( thing: JavaThing ) = new RichThing()
def apply() = new RichThing()
}
Run Code Online (Sandbox Code Playgroud)
有了这个,我可以实例化接口的Java实现并像使用它一样RichThing(由于隐式转换):
new JavaThingImpl().richStuff
Run Code Online (Sandbox Code Playgroud)
我也可以RichThing使用工厂方法创建一个(由于apply方法):
val a = RichThing()
Run Code Online (Sandbox Code Playgroud)
我想做的是以相同的方式实例化接口的任意Java实现.这不起作用,因为Scala然后查找实现的伴随对象,但找不到:
val b = JavaThingImpl() // "not found: value JavaThingImpl"
Run Code Online (Sandbox Code Playgroud)
我可以为Java实现创建一个Scala伴侣对象:
object JavaThingImpl { def apply() = new RichThing() }
Run Code Online (Sandbox Code Playgroud)
但关键是要使这个工作适用于任何(特别是未知的)接口实现.
有没有办法实现这个?例如,基于RichThing对象中的隐式转换,动态地为Java实现创建Scala伴随对象?
或者从Java端创建Scala伴侣对象,也许在抽象类中?
| 归档时间: |
|
| 查看次数: |
816 次 |
| 最近记录: |