gpt4 book ai didi

scala - Scala 中的简单构建器模式

转载 作者:行者123 更新时间:2023-12-02 03:47:34 24 4
gpt4 key购买 nike

我正在为类似 map 的容器实现一个非常简单的构建器模式:

trait KeyValueContainer[K,V] {
private var props: Map[K, V] = new HashMap[K, V]
private var built = false

/**
* Adds a key/value pair
*/
def +=(key: K, value: V): KeyValueContainer[K,V] = {
if (built)
throw new BuilderException

props = props + (key -> value)
this
}

def build = {
built = true
this
}
}

class MyContainer extends KeyValueContainer[String, Double]

当在“new MyContainer()”上使用上述“+=”或“build”方法时,结果在两种情况下都是 KeyValueContainer[String,Double] 类型...

我很确定我在过去的某个地方读到过这可以以某种方式返回实际的 MyContainer 子类型。您会为此(Java 风格)使用方法返回类型协变,还是您认为对此有更类型安全/更好的解决方案?

谢谢!

最佳答案

这里是:

http://docs.scala-lang.org/overviews/core/architecture-of-scala-collections.html

该模式依赖于编译时如何解析隐式。基本上,如果范围内有多个隐式,编译器会选择最具体的一个(在您的情况下,您需要的子类型构建器)。

通过这种方式,您可以在基类中进行泛型实现,并通过隐式参数获取子类构建器。

这是我为自己的一个项目所做的示例:

https://gist.github.com/hejfelix/8a0270855d498d7981f9

此模式的另一个重要方面是显式自键入: http://www.scala-lang.org/node/124

关于scala - Scala 中的简单构建器模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15999887/

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