Scala中是否可以将其定义MyAlias[A]为别名MyClass[String, A].例如,MyAlias[Int]会参考Map[String, Int].
Ben*_*mes 19
注意Map是a trait,而不是a class.
您仍然可以使用type关键字对其进行别名:
type StringMap[A] = Map[String, A]
val myMap: StringMap[Int] = Map("a" -> 1)
Run Code Online (Sandbox Code Playgroud)
这可以的范围内进行class,object或者trait定义(和以任何方法或表达的范围).
有时您会希望别名对其声明范围是私有的,纯粹是为了实现代码的便利.如果您希望该类型通常可用,则Package Objects有用:
package object mypackage {
type StringMap[A] = Map[String, A]
}
Run Code Online (Sandbox Code Playgroud)
因为Map是特征(和关联的伴随对象)而不是类,所以您将无法直接使用它来创建实例:
val myMap = new StringMap[Int]
// error: trait Map is abstract; cannot be instantiated
Run Code Online (Sandbox Code Playgroud)
但是,如果您为一个类别名,您仍然可以使用new关键字:
type StringHashMap[A] = HashMap[String, A]
val myMap = new StringHashMap[Int]
Run Code Online (Sandbox Code Playgroud)