Ich habe eine Reihe von Strukturen in Thrift
definiert. Konzeptionell sind einige dieser Strukturen Unterklassen einer gemeinsamen Elternklasse. Da Thrift
nicht struct Vererbung nicht unterstützt, habe ich die folgende Strategie, um die Strukturen zu definieren:Abgleich der fehlenden Vererbung in der Sparsamkeit mit Methodendefinitionen in Java/Scala
Beispiel
Say A
und B
sind Subtypen von Eltern type P
. Hier sind meine thrift Definitionen zu vertreten, dass:
struct P {
1: i32 childType,
2: list<byte> payload
}
struct A {
1: i32 x
}
struct B {
1: i32 y
}
Objekte type A and B
serialisiert werden als Datensätze von type P
(das payload
Feld würde speichern die serialisierte Version des Objekts und dem Wert von childType
zeigt an, ob die serialisierten Nutzlast von type A or B
). Während der Deserialisierung zeigt der Wert des Felds childType
an, wie payload
deserialisiert werden muss.
Dieser Ansatz bereitet jedoch Schwierigkeiten beim Schreiben von Code in einer objektorientierten Sprache wie Java oder Scala. Zum Beispiel kann ich in einer Funktion, die ein Objekt type P
zurückgibt, kein Ergebnis type A
oder type B
zurückgeben.
Frage
(i) Gibt es eine empfohlene Vorgehensweise, mit diesem Problem umgehen? dh, wie gleicht man die fehlende Vererbung in Thrift
mit Java/Scala
Code, der die Vererbung nutzt?
Vielen Dank im Voraus.