10
斯卡拉有可能將MyAlias[A]
定義爲MyClass[String, A]
的別名。例如,MyAlias[Int]
將參考Map[String, Int]
。scala中的類別別號
斯卡拉有可能將MyAlias[A]
定義爲MyClass[String, A]
的別名。例如,MyAlias[Int]
將參考Map[String, Int]
。scala中的類別別號
請注意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]
謝謝,地圖是一個壞榜樣,我的意思是(案件)班 – iwalktheline