我有一个特殊的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)伪构造函数.我需要那样的东西吗?
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的类似问题的答案中所描述的.
| 归档时间: |
|
| 查看次数: |
3397 次 |
| 最近记录: |