2012-05-31 2 views

ответ

18

Отметьте, что Map является trait, а не class.

Вы все еще можете псевдоним его с помощью ключевого слова type:

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

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

Это может быть сделано в рамках определения 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] 
+0

Спасибо, Карта была плохой пример, я имел в виду (случай) класс – iwalktheline

Смежные вопросы