scala中的类别名

时间:2012-05-31 08:53:22

标签: scala alias

Scala是否可以将MyAlias[A]定义为MyClass[String, A]的别名。例如,MyAlias[Int]会引用Map[String, Int]

1 个答案:

答案 0 :(得分:19)

请注意,Maptrait,而不是class

您仍然可以使用type关键字对其进行别名:

type StringMap[A] = Map[String, A]

val myMap: StringMap[Int] = Map("a" -> 1)

这可以在classobjecttrait定义的范围内(以及任何方法或表达式的范围内)完成。

有时你会希望别名对其声明范围是私有的,纯粹是为了实现代码的便利。如果您希望该类型通常可用,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]