是否可以在 Scala 中定义MyAlias[A]
为MyClass[String, A]
. 例如,MyAlias[Int]
将指Map[String, Int]
.
问问题
4753 次
1 回答
20
请注意,Map
是 a trait
,而不是 a class
。
您仍然可以使用type
关键字对其进行别名:
type StringMap[A] = Map[String, A]
val myMap: StringMap[Int] = Map("a" -> 1)
这可以在 a或定义的范围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]
于 2012-05-31T08:59:36.490 回答