了解Scala上限

时间:2017-08-19 13:47:14

标签: scala

我试图理解为什么Scala中存在大写。这是他们试图解释Upperbounds

的示例代码
class Animal
class Dog extends Animal
class Puppy extends Dog

class AnimalCarer{
  def display [T <: Dog](t: T){
    println(t)
  }
}

object ScalaUpperBoundsTest {
  def main(args: Array[String]) {

    val animal = new Animal
    val dog = new Dog
    val puppy = new Puppy

    val animalCarer = new AnimalCarer

    //animalCarer.display(animal) uncommenting this line leads to an error
    animalCarer.display(dog)
    animalCarer.display(puppy)
  }
}

如果注释行被取消注释,则会出现错误。但是,如果您将display中的AnimalCarer方法更改为

,您仍会收到错误消息
def display(t: Dog){
println(t)
}

那么,需要具体告诉编译器t应该是Dog的子类型吗?

1 个答案:

答案 0 :(得分:3)

这似乎是一个相当无用的例子。你是对的,def display[T <: Dog](t: T)等同于def display(t: Dog),类型参数没有用处。

我们可以稍微改变你的例子,使它更有用:

 def display[T <: Dog](t: T): T = {
    println(t)
    t
 }

此处类型参数很有用,因为如果您传入Poodle,那么您获得的内容仍然是Poodle,而不仅仅是Dog