我试图理解为什么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的子类型吗?
答案 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
。