Scala扩展Map(或HashMap)并允许构造函数的映射列表

pfe*_*rel 2 scala

我有一个特殊的Map,它最终会对值进行一些一致性检查,这些值被限制为具有特殊含义.现在我只想创建一个与Map [String,Any]完全相同的Schema,特别是我想实例化的是一个映射列表,而不是强制指定Map的类型,所以他们总是[String,Any].而不是

val myMap:Map[String,Any] = Map("one" -> 1, "two" -> "2", ...)
Run Code Online (Sandbox Code Playgroud)

我希望能够:

val mySchema:Schema = Schema("one" -> 1, "two" -> "2", ...)
Run Code Online (Sandbox Code Playgroud)

Map是一个特性,所以我认为我需要像HashMap这样扩展一个类

class Schema extends HashMap[String, Any]
Run Code Online (Sandbox Code Playgroud)

当我用一个初始映射列表实例化它时,我得到它

val mySchema = new Schema("one" -> 1, "two" -> "2", ...)

Error:(110, 19) too many arguments for constructor Schema: ()drivers.Schema
  val mySchema = new Schema("one" -> 1, "two" -> "2")
              ^
Run Code Online (Sandbox Code Playgroud)

HashMap中有一些神奇的东西远远超出我的阅读(它是extends1级with5 级特征).但看起来构造函数的"内容"(映射列表?)被传递给某些initWithContents(contents)伪构造函数.我需要那样的东西吗?

Val*_*ris 5

class Schema(elems: Tuple2[String, Any]*) extends HashMap[String, Any] {
    this ++= elems
}

val mySchema = new Schema("one" -> 1, "two" -> "2")
Run Code Online (Sandbox Code Playgroud)

说明:

不幸的是,这对于不可变的HashMap不起作用.据我所知,"扩展"不可变HashMap的唯一方法是创建一个包含内部引用的类,如在SO的类似问题的答案中所描述的.