Scalaにupperboundが存在する理由を理解しようとしています。彼らはコメント行がコメント解除された場合UpperboundsScalaの上限を理解する
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)
}
}
を説明しようとしている。このASNのサンプルコードは、エラーが発生します。あなたは
def display(t: Dog){
println(t)
}
ので、特にtは犬のサブタイプでなければなりませんコンパイラに指示する必要が何であるかにAnimalCarer
でdisplay
方法を変更した場合しかし、あなたはまだエラーが出るのでしょうか?
これはあまり意味がありません。 'display'メソッドは何かを' Dog'と呼びます。あなたは 'Animal'をコンパイルすべきではありません。 'Animal'は' Dog'ではないので、メソッドに提案された変更はまだ 'Animal'を渡すことができません。私はあなたの混乱を理解していません – pedromss
@pedromss:私はなぜコンパイラがそれ自身でそれを検出するのに十分なインテリジェントであるとき、 "[T <:Dog](t:T)"というこの構文を与える必要があるのですか? – Ashwin