我正在为类似地图的容器实现一个非常简单的构建器模式:
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 风格),还是在您看来有更类型安全/更好的解决方案?
谢谢!