У меня есть пользовательский объект, который использует общий тип:Десериализация объекта с общим типом с Джексоном
class MyObject <T> {
int x;
String y;
T customObject;
}
Я использую Джексон сериализацию сериализовать объект. В то время как де-сериализация объекта, я хотел знать, что именно я должен передавать для поля типа.
Должно ли быть вариантом 1 или 2?
ObjectMapper mapper = new ObjectMapper();
MyObject obj1 = objectMapper.readValue(jacksonString, MyObject.class); //option 1
MyObject obj1 = objectMapper.readValue(jacksonString, MyObject<T>.class); //option 2
Я смущен, если это даже правильный подход.
Было бы нужно быть вариант 2, поскольку десериализатор не знает, какой класс использовать для customObject иначе. Вместо T вам нужно явно объявить, какой класс используется для общего типа (например, 'objectMapper.readValue (jacksonString, MyObject .class') –
Поскольку Java-дженерики используют стирание типа, MyObject.class и MyObject .class' - это тот же объект класса. –
Ну, опция 2 не компилируется, поэтому это _definitely_ не так. Самое большее, что вы можете получить во время компиляции, - это MyObject > obj1 = ... MyObject.class); что вам нужно будет делать непроверенные броски; вы, вероятно, захотите вручную проверить, что «customObject» имеет ожидаемый тип, прежде чем делать это. – yshavit