Ich implementiere ein Gson TypeAdapter
für zwei abhängige generische Modelle.
Dafür muss ich die TypeToken
und TypeAdapter
bekommen. Indem Sie
Ich erhalte einen Typ-Token für beide Modelle eines beliebigen Typs AnyType
und den zugehörigen Adapter. Dies ist, was ich für ModelA
benötige, aber für ModelB
würde ich stattdessen den Adapter für List<AnyType>
benötigen, was das Ergebnis der direkten Verwendung von ModelA<List<AnyType>>
ist.
Verwendung der Schnittstelle des unformatierten Typs des ursprünglichen Token-Typs
%Vor% Ich erhalte nur den Typ gelöschten Typ von List
.
Wie kann ich diese beiden Informationen kombinieren, um den generischen List<AnyType>
Typ zu erhalten oder direkt zu erstellen? Als Eingabe hat es nur den Typ Token für ModelB<AnyType>
.
Für das gegebene Verhalten habe ich einen einfachen Test implementiert, der die Unterschiede zeigt. Ich habe den expected
-Teil aus der Antwort von hahn mit der internen Nicht-API-Klasse $Gson$Types
von Gson genommen.
Es gibt eine $Gson$Types
, die Sie verwenden können, um Type
der eingegebenen List
abzurufen. Zum Beispiel mit:
würde Type
mit rawType
auf List
und mit typeArguments
auf [String]
zurückgeben. So behalten Sie die Typen, wie Sie brauchen.
und dann Ausführen dieses Blocks
%Vor% würde mit dem Adapter von CollectionTypeAdaptorFactory
mit elementTypeAdapter.type
auf die Klasse String
gesetzt werden.
Wenn Sie .getType()
anstatt .getRawType()
verwenden, scheint die gesuchte Information erhalten zu bleiben:
Hoffentlich können Sie herausfinden, wie Sie TokenAdaptors
von dort erstellen können.