I Retrofit bin mit zusammen mit Gson Daten aus einer API zum Abrufen und deserialisieren es in Java-Objekten wie unter Gson der @SerializedName
Anmerkung mit:Wie werden mehrere Java-Annotationen mit demselben Wert verwendet?
public class MyApiObject {
@SerializedName("apiJsonKey")
private String myValue;
...
}
Es funktioniert gut, aber ich brauche Objekte von MyApiObject
zu einem schicken Firebase-Datenbank und dafür muss das Objekt wieder in JSON serialisiert werden. Die Java-API von Firebase führt dies automatisch aus, generiert jedoch die Schlüssel basierend auf den Namen der Instanzvariablen (myValue
) und nicht auf dem serialisierten Namen().
Ich weiß, ich kann Firebase @PropertyName
Annotation verwenden, aber das würde erfordern, dass ich zwei Anmerkungen mit den gleichen Werten verwenden, die redundant und fehleranfällig ist.
Gibt es einen besseren Weg, dies zu tun?
Ich habe über diesen Ansatz nachgedacht, aber meine Klasse hat über ein Dutzend solcher Parameter/Instanzvariablen, von denen jede eine separate Konstante String benötigen würde. Es scheint einfach unnötig, ist das wirklich der beste Weg zu gehen? – Sumit
Dann repräsentiert deine Klasse vielleicht zu viele Dinge. Wenn Sie mit großen Klassen enden, bedeutet das normalerweise, dass sie in kleinere Klassen aufgeteilt werden können, die zusammen arbeiten. Selbst wenn Ihr Fall nicht zu mehreren Klassen passt, ist es besser, keinen fehleranfälligen Code einzuführen, auch wenn er größer ist, und wie Sie bereits sagten, ist die wiederholte Verwendung derselben Zeichenfolge eine schlechte Idee. – gmanjon
Eine andere Option besteht darin, eine Klasse von Konstanten zu trennen. Aber normalerweise Klassen und Pakete mit Namen wie Konstanten, common, utils, usw. enden als ein Loch für Code, den Sie nicht wissen, wo Sie setzen. Ich denke, es ist besser, mehr Zeit mit der Definition, Neudefinition und Verfeinerung Ihrer Klassen zu verbringen. Es dauert zu lange, aber Sie haben in der Regel ein stärkeres Design, besser lesbar und haltbar. – gmanjon