gpt4 book ai didi

java - 用 Scala 隐式包装的 Java 接口(interface)实现的工厂方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:27:35 29 4
gpt4 key购买 nike

我正在使用 Scala implicits 为 Java 接口(interface)定义丰富的包装器:

class RichThing { def richStuff: Unit = {} }

在伴生对象中,我定义了隐式转换和一个apply 工厂方法:

object RichThing { 
implicit def rich( thing: JavaThing ) = new RichThing()
def apply() = new RichThing()
}

有了这个,我可以实例化接口(interface)的 Java 实现并像 RichThing 一样使用它(由于隐式转换):

new JavaThingImpl().richStuff

我还可以使用工厂方法创建一个 RichThing(由于 apply 方法):

val a = RichThing()

我想做的是以相同的方式实例化接口(interface)的任意 Java 实现。这是行不通的,因为 Scala 随后会寻找实现的伴生对象,但找不到:

val b = JavaThingImpl() // "not found: value JavaThingImpl"

我可以为 Java 实现创建一个 Scala 伴随对象:

object JavaThingImpl { def apply() = new RichThing() }

但重点是使该接口(interface)适用于任何(尤其是未知的)实现。

有什么办法可以实现吗?例如,基于 RichThing 对象中的隐式转换,为 Java 实现动态创建 Scala 伴随对象?

或者从 Java 端创建 Scala 伴随对象,也许在一个抽象类中?

最佳答案

不,这在 Scala 中是不可能的。在不影响类型健全性的情况下将它添加到语言中可能是可能的,但我质疑额外的复杂性是否值得。

关于java - 用 Scala 隐式包装的 Java 接口(interface)实现的工厂方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/514428/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com