12

是否可以在 Scala 中定义MyAlias[A]MyClass[String, A]. 例如,MyAlias[Int]将指Map[String, Int].

4

1 回答 1

20

请注意,Map是 a trait,而不是 a class

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

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

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

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

有时您会希望别名对其声明范围是私有的,纯粹是为了方便您的实现代码。如果您希望该类型普遍可用,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]
于 2012-05-31T08:59:36.490 回答