2012-05-31 58 views

回答

18

請注意Maptrait而不是class

可以使用type關鍵字仍在它別名:

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

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

這可以一個classobjecttrait定義的範圍內進行(和以任何方法或表達的範圍)。

有時您會希望別名對其聲明範圍是私有的,純粹是爲了方便您的實現代碼。如果你想要的類型是可用一般,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