我想理解斯卡拉中的「下界」。請找到下面的例子斯卡拉理解中的「下界」
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)
允許小狗是不是一條狗,以及沒有一個超類犬,然後 ?一些真正的 用例將幫助我理解如果(animalDisplay.displayUptoDog(puppy))
允許再打印,而不是更好- animalDisplay.displayUptoDog(人),其中人是不是一個超類 狗然後爲什麼它被允許和打印 「[email protected]」
- animalDisplay.displayUptoDog(工廠)其中工廠不在相同的 層次結構,t母雞爲什麼它也允許並打印 「[email protected]」
讓我知道如果我錯過了一些東西
'com.typeSystem.typeBound.lowerBound.Puppy'是運行時類。它沒有提及編譯時類型。您可以使用TypeTag來獲得關於編譯時類型的信息。 –