Scala是否可以将MyAlias[A]
定义为MyClass[String, A]
的别名。例如,MyAlias[Int]
会引用Map[String, Int]
。
答案 0 :(得分:19)
请注意,Map
是trait
,而不是class
。
您仍然可以使用type
关键字对其进行别名:
type StringMap[A] = Map[String, A]
val myMap: StringMap[Int] = Map("a" -> 1)
这可以在class
,object
或trait
定义的范围内(以及任何方法或表达式的范围内)完成。
有时你会希望别名对其声明范围是私有的,纯粹是为了实现代码的便利。如果您希望该类型通常可用,Package Objects有用:
package object mypackage {
type StringMap[A] = Map[String, A]
}
因为Map
是特征(和关联的伴随对象)而不是类,所以您将无法直接使用它来创建实例:
val myMap = new StringMap[Int]
// error: trait Map is abstract; cannot be instantiated
但是,如果您为某个类添加了别名,则仍然可以使用new
关键字:
type StringHashMap[A] = HashMap[String, A]
val myMap = new StringHashMap[Int]