咱們先來看一個例子,若是你不制定集合類型,那麼Scala會自動給List指定一個Double類型scala
scala> val l = List(1, 2.0, 33D, 400L) l: List[Double] = List(1.0, 2.0, 33.0, 400.0)
若是你想指定集合類型爲Number或者AnyVal,那麼你必須在集合聲明後的[]中加入你指定的類型。
code
scala> val l = List[Number](1, 2.0, 33D, 400L) l: List[Number] = List(1, 2.0, 33.0, 400) scala> val l = List[AnyVal](1, 2.0, 33D, 400L) l: List[AnyVal] = List(1, 2.0, 33.0, 400)
經過手動設定,你能夠指定一個集合的類型。一般狀況下,這用於集合內容爲混合類型活着有着多層結構的類型,好比繼承,實現等。下面咱們來看一個帶有層級關係的例子:繼承
scala> trait Animal defined trait Animal scala> trait FurryAnimal extends Animal defined trait FurryAnimal scala> case class Dog(name: String) extends Animal defined class Dog scala> case class Cat(name: String) extends Animal defined class Cat
咱們使用Dog和Cat的失利來建立一個Sequencyit
scala> val l = Array(Cat("Tom"), Dog("DaHuang")) l: Array[Product with Serializable with Animal] = Array(Cat(Tom), Dog(DaHuang))
這正如你看到的,Scala自動給出的集合類型是Array[Product with Serializable with Animal],若是你想指定集合類型是Array[Animal],那麼你必須手動指定:class
scala> val l = Array[Animal](Cat("Tom"), Dog("DaHuang")) l: Array[Animal] = Array(Cat(Tom), Dog(DaHuang))