第十章 Scala 容器基础(五):肯定集合类型(范型)

解决方案:

    咱们先来看一个例子,若是你不制定集合类型,那么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))
相关文章
相关标签/搜索