Kapitel 11. Varianzverhalten und Gleichheit

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Ein wichtiges Konzept in objektorientierten Typsystemen nennt sich Varianz unter Vererbung. Genauer gesagt, brauchen wir wohldefinierte Regeln dafür, wann eine Instanz eines Typs durch eine Instanz eines anderen Typs ersetzt werden kann. Dieses Kapitel beginnt mit einer Erkundung dieser Konzepte.

Eine logische Folge davon ist das Thema der Instanzgleichheit, das in objektorientierten Sprachen schwieriger ist, als es vielleicht scheint.

Parametrisierte Typen: Varianz unter Vererbung

Angenommen, ein val ist vom Typ Seq[AnyRef] deklariert. Darfst du ihr eine Seq[String] zuweisen? Mit anderen Worten, gilt Seq[String] als ersetzbar durch Seq[AnyRef]? Das Liskov-Substitutionsprinzip (LSP) war das erste, das formell definiert hat, was dies bedeutet. In der OOP wird LSP mithilfe von Typenhierarchien definiert. Instanzen eines Typs A sind durch Instanzen eines anderen Typs B ersetzbar, wenn A ein Subtyp von B ist. Da AnyRef ein Supertyp aller Referenztypen ist, wie String, sind Instanzen von String ersetzbar, wenn Instanzen von AnyRef erforderlich sind. (Wir werden die Scala-Typenhierarchie in Kapitel 13 ausführlich besprechen).

Wie sieht es mit parametrisierten Typen aus, z. B. mit Sammlungen wie Seq[AnyRef] und Seq[String]? Schauen wir uns zuerst die unveränderlichen parametrisierten Typen an.

Der Typparameter ...

Get Scala programmieren, 3. Auflage now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.