是否可以在 Scala 中定义 MyAlias[A]
作为 MyClass[String, A]
的别名.例如,MyAlias[Int]
将引用 Map[String, Int]
.
最佳答案
请注意 Map
是 trait
,而不是 class
.
您仍然可以使用 type
为其设置别名。关键词:
type StringMap[A] = Map[String, A]
val myMap: StringMap[Int] = Map("a" -> 1)
这可以在
class
的范围内完成。 , object
或 trait
定义(并且在任何方法或表达式的范围内)。有时您会希望别名对其声明范围是私有(private)的,纯粹是为了方便您的实现代码。如果您希望该类型普遍可用,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]
关于scala - scala中的类别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10830308/