Возможно ли в Scala определить MyAlias[A]
как псевдоним для MyClass[String, A]
. Например, MyAlias[Int]
будет ссылаться на Map[String, Int]
.
Атрибут класса в scala
Ответ 1
Обратите внимание, что Map
является trait
, а не class
.
Вы все еще можете использовать его с помощью ключевого слова type
:
type StringMap[A] = Map[String, A]
val myMap: StringMap[Int] = Map("a" -> 1)
Это можно сделать в рамках определения class
, object
или trait
(и в рамках любого метода или выражения).
Иногда вам нужно, чтобы псевдоним был закрыт для области объявления, просто как удобство для вашего кода реализации. Если вы хотите, чтобы тип использовался в целом, Объекты пакета полезны:
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]