Wie man TypToken + Generika mit Gson in Kotlin verwendet
Ich bin nicht in der Lage, um eine Liste von generischen Typ einer benutzerdefinierten Klasse (Umdrehungen):
val turnsType = TypeToken<List<Turns>>() {}.type
val turns = Gson().fromJson(pref.turns, turnsType)
er sagte:
cannot access '<init>' it is 'public /*package*/' in 'TypeToken'
InformationsquelleAutor der Frage Juancho | 2015-10-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen diese inline-Spaß:
dann rufen Sie es auf diese Weise:
HINWEIS: Dieser Ansatz war nicht möglich, bevor in der alten kotlin-plugin-Versionen, aber jetzt sind Sie in der Lage, es zu benutzen.
Bisherigen Alternativen:
ALTERNATIVE 1:
Setzen Sie
object :
und der spezifischen Art infromJson<List<Turns>>
ALTERNATIVE 2:
Als @cypressious erwähnen, es erreicht werden kann, auch auf diese Weise:
Verwendung als:
InformationsquelleAutor der Antwort Juancho
Löst dies das problem:
Die erste Zeile erzeugt eine Objekt-Ausdruckdie stammt aus
TypeToken
und dann ruft die Java -Type
. Dann dieGson().fromJson
Methode entweder muss der Typ angegeben, der für das Ergebnis der Funktion (die sollten mit derTypeToken
erstellt). Zwei Versionen dieser Arbeit, wie oben oder:Um es einfacher zu erstellen, die
TypeToken
können Sie eine Hilfsfunktion erstellen, die erforderlich ist, um inlineso dass Sie es verwenden können,vergegenständlicht Typ-Parameter:Die dann verwendet werden können in einer dieser beiden Möglichkeiten:
Und der gesamte Vorgang gewickelt werden kann in einer Erweiterung der Funktion für die
Gson
Beispiel:So, Sie können einfach anrufen Gson und sich keine sorgen über die
TypeToken
an alle:Hier Kotlin ist die Verwendung von Typ-Inferenz von einer Seite der Zuordnung oder der anderen, und verdinglicht Generika für eine inline-Funktion übergeben, die durch die full-Typ (ohne Löschung) und Nutzung, zu konstruieren, ein
TypeToken
und auch den Aufruf zu GsonInformationsquelleAutor der Antwort Jayson Minard
Dies funktioniert auch, und ist einfacher
InformationsquelleAutor der Antwort Christopher Perry
Weitere option (nicht sicher, es sieht eleganter aus als die anderen) könnte ein Aufruf wie dieser:
So sind Sie über die java-Array-Klasse eine liner anstelle von "reinen Kotlin".
InformationsquelleAutor der Antwort Tobias Reich
Es ist meine Art zu Parsen von Daten-array in kotlin.
InformationsquelleAutor der Antwort Toàn Mỹ
Ich etwas verwendet, wie diese zu konvertieren
T
zustring
&String
zurückT
mitGson
. Nicht genau das, was Sie suchen, aber nur für den Fall.InformationsquelleAutor der Antwort harsh_v