Ich versuche zu verstehen "untere Grenze" in Scala. Hier finden Sie das folgende Beispiel"Untergrenze" in Scala Verständnis
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]
}
}
Meine Fragen
sind als Welpe nicht ein Hund ist und nicht eine Superklasse von Hund, dann warum
animalDisplay.displayUptoDog(puppy)
erlaubt? einige echte usecase wird mir helfen, besser zu verstehen,Wenn es
(animalDisplay.displayUptoDog(puppy))
erlaubt es dann sollte Druck[email protected]
statt[email protected]
- animalDisplay.displayUptoDog (human), wo Mensch nicht eine Superklasse ist von Hund warum ist es dann erlaubt und Druck „[email protected]“
- animalDisplay.displayUptoDog (Pflanze), wo Pflanze nicht in der gleichen Hierarchie ist, t hen, warum es auch und „[email protected]“ Druck erlaubt ist
Lassen Sie mich wissen, ob ich irgendeine Sache ist
'com.typeSystem.typeBound.lowerBound.Puppy' ist die Laufzeitklasse. Es sagt nichts über den Typ der Kompilierzeit aus. Sie können einen 'TypeTag' verwenden, um Informationen zum Kompilierungszeittyp zu erhalten. –