私はスカラの「下限」を理解しようとしています。 animalDisplay.displayUptoDog(puppy)
が許可されている理由子犬は、その後、同様に 犬のスーパークラス犬ではないではないのでScalaの理解で「下限」
class Animal
class Dog extends Animal
class Puppy extends Dog
class Human extends Animal
class Plant
class AnimalDisplay{
def displayUptoDog [T >: Dog](t: T){
println(t)
}
def displayUptoAnimal [T >: Animal](t: T){
println(">>"+t.getClass())
}
}
object ScalaLowerBoundsTest {
def main(args: Array[String]) {
val animal = new Animal
val dog = new Dog
val puppy = new Puppy
val human=new Human
val plant = new Plant
val animalDisplay = new AnimalDisplay
println("Upto Animal")
animalDisplay.displayUptoAnimal(animal)
animalDisplay.displayUptoAnimal(dog)
animalDisplay.displayUptoAnimal(puppy)
animalDisplay.displayUptoAnimal(human)
animalDisplay.displayUptoAnimal(plant)
println("Upto Dog")
animalDisplay.displayUptoDog(animal)
animalDisplay.displayUptoDog(dog)
animalDisplay.displayUptoDog(puppy)
// prints: [email protected]
animalDisplay.displayUptoDog(human)
//print:[email protected]
animalDisplay.displayUptoDog(plant)
//prints:[email protected]
}
}
私の質問は
ある下記の例を見つけてください!それは
(animalDisplay.displayUptoDog(puppy))
はなく人間がのスーパークラス ない[email protected]
- animalDisplay.displayUptoDog(人間)のそれ べき 印刷
[email protected]
許可されている場合は、いくつかの本当の ユースケースは、私はより良い を理解するのに役立ちますなぜ犬が許可され、印刷されているのですか? "[email protected]"
- animalDisplay.displayUptoDog(plant)ここで植物は同じ の階層にはありませんあなたが
Puppy
をキャストすることができますので、それはまた、許可され、 「[email protected]」
は、私はいくつかのこと
'com.typeSystem.typeBound.lowerBound.Puppy'は実行時クラスです。コンパイル時のタイプについては何も言わない。 'TypeTag'を使って、コンパイル時の型について知ることができます。 –