Deserialisieren habe ich ein benutzerdefiniertes Objekt, das eine generische Art verwendet:ein Objekt mit einem generischen Typ mit Jackson
class MyObject <T> {
int x;
String y;
T customObject;
}
I jackson bin mit dem Objekt serialisiert und serialisiert wird. Beim Deserialisieren des Objekts wollte ich wissen, was genau ich für das Typfeld weitergeben soll.
Sollte es Option 1 oder 2 sein?
ObjectMapper mapper = new ObjectMapper();
MyObject obj1 = objectMapper.readValue(jacksonString, MyObject.class); //option 1
MyObject obj1 = objectMapper.readValue(jacksonString, MyObject<T>.class); //option 2
Ich bin verwirrt, wenn dies auch der richtige Ansatz ist.
Es müßte Option 2 sein, da die Deserializer nicht wissen, welche Klasse für customObject sonst zu verwenden. Anstelle von T müssen Sie explizit deklarieren, welche Klasse für den generischen verwendet wird (dh 'objectMapper.readValue (jacksonString, MyObject .class')) –
Da Java-Generika Typ löschen verwenden,' MyObject.class' und 'MyObject .class' ist das gleiche Klassenobjekt –
Nun, Option 2 nicht kompilieren, so ist es _definitely_ nicht, dass die meisten Sie bei der Kompilierung bekommen können, ist 'MyObject > obj1 = ... MyObject.class)..' Nach das musst du unkontrollierte Umwandlungen machen; Wahrscheinlich möchten Sie manuell überprüfen, ob "customObject" vom erwarteten Typ ist, bevor Sie diese Umwandlung durchführen. – yshavit