Bei Thrift können Listen direkt als Argumente oder Rückgabetypen verwendet werden, wenn es um einen Methodenaufruf bei einem Service geht. Wenn Sie eine explizite Objekt (de)Serialisierung benötigen, gibt es einen bequemen Weg (in Java), um Thrift für die (De)Serialisierung einer List< TBase > ohne separate Struktur in der Thrift IDL zu verwenden?
Konkret gesagt, nehmen wir an, ich habe in Thrift Folgendes definiert
struct A {
1: required long x;
2: required long y;
}
Ich kann eine Liste davon (de)serialisieren, indem ich Folgendes definiere
struct ListOfA {
1: required list theList;
}
und dann
ListOfA myList = ...
TSerializer serializer = new TSerializer();
byte[] mySerializedList = serializer.serialize(myList);
Meine Frage ist, ob es möglich ist, diese (leicht unelegante) Definition einer zusätzlichen Struktur nur zur Aufnahme der List zu vermeiden.
Das Folgende funktioniert nicht, da TSerializer.serialize einen TBase erwartet
List
myList = ... // List anstelle von ListOfA TSerializer serializer = new TSerializer(); byte[] mySerializedList = serializer.serialize(myList); //kompiliert nicht
Die Verwendung eines typedef in der IDL würde bereits helfen, aber diese werden anscheinend nicht in eine Java-Klasse übersetzt
typedef list
ListOfA
\=> ListOfA ist nicht in dem generierten Java-Code definiert.