用Scala包含的Java接口实现的工厂方法意味着什么?
发布时间:2020-12-16 18:49:41 所属栏目:安全 来源:网络整理
导读:我正在使用 Scala implicits为 Java接口定义一个丰富的包装器: class RichThing { def richStuff: Unit = {} } 在伴侣对象中,我定义了隐式转换和应用工厂方法: object RichThing { implicit def rich( thing: JavaThing ) = new RichThing() def apply() =
我正在使用
Scala implicits为
Java接口定义一个丰富的包装器:
class RichThing { def richStuff: Unit = {} } 在伴侣对象中,我定义了隐式转换和应用工厂方法: object RichThing { implicit def rich( thing: JavaThing ) = new RichThing() def apply() = new RichThing() } 有了这个,我可以实例化接口的Java实现并像RichThing一样使用它(由于隐式转换): new JavaThingImpl().richStuff 我也可以使用工厂方法创建RichThing(由于apply方法): val a = RichThing() 我想做的是以相同的方式实例化接口的任意Java实现.这不起作用,因为Scala然后查找实现的伴随对象,但找不到: val b = JavaThingImpl() // "not found: value JavaThingImpl" 我可以为Java实现创建一个Scala伴侣对象: object JavaThingImpl { def apply() = new RichThing() } 但关键是要使这个工作适用于任何(特别是未知的)接口实现. 有没有办法实现这个?例如,根据RichThing对象中的隐式转换,动态地为Java实现创建Scala伴随对象? 或者从Java端创建Scala伴侣对象,也许在抽象类中? 解决方法
不,这在Scala中是不可能的.可能有可能将它添加到语言中而不会影响类型的健全性,但我怀疑额外的复杂性是否值得.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |