Was sind die Unterschiede zwischen final Klasse und versiegelte Klasse in Scala?
Gibt es zwei Arten von Modifikatoren in Scala: final
und sealed
Was sind die Unterschiede zwischen Ihnen? Wann sollten Sie einen über den anderen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen
final
Klasse nicht erweitert werden kann, Zeitraum.Einen
sealed
Merkmal kann nur verlängert werden in der gleichen Quelldatei als es erklärt. Dies ist nützlich für die Erstellung von ADTs (algebraische Datentypen). Ein ADT ist definiert durch die Summe seiner abgeleiteten Typen.E. g.:
Option[A]
ist definiert durchSome[A]
+None
.List[A]
ist definiert durch::
+Nil
.Weil
Option[A]
ist versiegelt, es kann nicht verlängert werden, die von anderen Entwicklern zu tun, so würde die Veränderung seiner Bedeutung.Some[A]
final ist, da es nicht erweitert werden kann, Zeitraum.Als zusätzlichen bonus, wenn eine Eigenschaft versiegelt ist, kann der compiler Sie warnen, wenn Ihre Suchmuster sind nicht erschöpfend genug, weil es weiß, dass
Option
ist begrenzt zuSome
undNone
.sealed
- Vorlagen kann erweitert werden, in der gleichen - compilation-unit, nicht die selbe Datei. Die Tatsache, dass der Scala-compiler die Kompilierung Einheit entspricht einer Datei ist eine Implementierung detail. Es könnten auch andere Compiler, welche zum Beispiel eine Datenbank zum speichern von Quellcode-Artefakten statt, das Dateisystem.sealed
Klassen (oder Merkmale) können noch vererbt werden in der gleichen Quelle-Datei (wofinal
Klassen kann nicht geerbt werden kann).Verwenden
sealed
wenn Sie einschränken möchten, die Anzahl der Unterklassen der Basis-Klasse (siehe "Algebraische Datentyp").Als einen der ganz praktischen Vorteile einer solchen Beschränkung kann der compiler nun warnen Sie über nicht-exaustive Muster entspricht:
sealed
- Vorlagen kann erweitert werden, in der gleichen - compilation-unit, nicht die selbe Datei. Die Tatsache, dass der Scala-compiler die Kompilierung Einheit entspricht einer Datei ist eine Implementierung detail. Es könnten auch andere Compiler, welche zum Beispiel eine Datenbank zum speichern von Quellcode-Artefakten statt, das Dateisystem.