Scala Erweiterung der parametrisierten abstrakten Klasse

8

Ich bin ziemlich neu in Scala und schreibe eine API-Bibliothek und versuche, nur Vals und unveränderliche Objekte (wo möglich) zu verwenden. Ich versuche, den richtigen Weg für die Modellierung der Objekte zu finden. Angenommen, es gibt mehrere "Post" -Objekte, die alle einige gemeinsame Felder haben, und jedes fügt seine eigenen spezifischen Felder hinzu:

%Vor%

Diese Methode fügt viele repetitive Deklarationen und Kode-Code hinzu, besonders wenn Sie mit vielen Post-Unterklassen und gemeinsamen Feldern in der abstrakten Klasse deklarieren. So wie ich es sehe, wird dies durch die Verwendung von Vals verursacht, die nur vom Konstruktor initialisiert werden können. Gibt es eine bessere Möglichkeit, die hier aufgeführten Beziehungen zu erstellen, oder muss ich darunter leiden, dass ich nur unveränderliche Objekte verwenden möchte?

    
orrsella 05.09.2012, 21:06
quelle

1 Antwort

8

Zunächst sind die val -Modifikatoren in den Fallklassenkonstruktoren redundant, der Scala-Compiler wird sie dir bereits "kostenlos" geben (das ist eine der Eigenschaften von Fallklassen). Wenn Sie tatsächlich versuchten, das zu kompilieren, werden Sie feststellen, dass ein Fehler wegen nicht deklarierter Überschreibung auftritt:

%Vor%

Ich empfehle persönlich, abstrakte Klassen mit Konstruktorargumenten so wenig wie möglich zu verwenden. Scala hat Eigenschaften, die hier besser funktionieren. Anstelle von Konstruktorargumenten deklarieren Sie (abstrakt) die Felder; Dann treten die Case-Klassen ein und aufgrund ihrer Argumente vals sind Sie fertig:

%Vor%

Wenn Sie außerdem sealed zu trait Post hinzufügen, können Sie die Subtypes von Post im Mustervergleich verwenden, ohne versehentlich Fälle zu übersehen.

    
0__ 05.09.2012, 22:09
quelle

Tags und Links