Scala UpperBound und LowerBound Konzept

8

Unten ist der Code, den ich ausführen möchte:

%Vor%

Die Methode printStudentDetails from MyGenericClassforLowerBound erzeugt das Problem. Die Anweisungen student.printDetails und student.printSomeOtherDetails sagen mir

%Vor%

Soweit ich verstanden habe:

  • Q[A <: B] bedeutet, dass die Klasse / Methode Q beliebige Objekte der Klasse A übernehmen kann, wobei die Klasse A der Untertyp der Klasse B ist. Dies wird Upper Bound genannt.
  • Q[A >: B] bedeutet, dass die Klasse / Methode Q beliebige Objekte der Klasse A übernehmen kann, wobei die Klasse A der Super-Typ der Klasse B ist. Dies wird Lower Bound genannt.

Bitte helfen Sie mir, wenn mein Verständnis falsch ist, und helfen Sie mir zu verstehen, warum das oben genannte Problem auftritt. Danke Jungs.

    
Sudipta Deb 06.11.2013, 20:11
quelle

1 Antwort

13

Ihr Verständnis ist nicht falsch, aber Sie haben die Konsequenzen nicht verfolgt.

Insbesondere haben alle Parameter tatsächlich eine Obergrenze von Object , wenn keine explizite Obergrenze angegeben ist. Dies geschieht bei der Methode printStudentDetails in Ihrem Typ MyGenericClassforLowerBound . Das heißt, ein Wert vom Typ Object könnte als Parameter für diese Methode übergeben werden. Aber Typ Object definiert nicht die Methoden printDetails und printSomeOtherDetails - daher der Fehler.

Um die Methode kompilieren zu lassen, müssten Sie auch eine geeignete obere Grenze angeben (ähnlich wie MyGenericClassforUpperBound ), zB:

%Vor%

Es sollte in diesem Fall jedoch beachtet werden, dass die untere Grenze effektiv redundant wird, weil jeder Parameter, der die Unterklassen Student erfolgreich übergeben kann, da er vom Typ Student behandelt werden kann und die obere Grenze erfüllt - so können auch InformationTechnologyStudent und Unterklassen von ComputerScienceStudent erfolgreich übergeben werden. Diese Art von Konstrukt ist nützlicher, wenn Sie Werte übergeben, die Typen aus zwei verschiedenen Hierarchien mischen.

    
Shadowlands 06.11.2013, 20:20
quelle

Tags und Links