Я делаю пользовательский десериализатор (простирающуюся StdDeserializer
) с помощью Jackson JSON library, и я не могу понять, что цель этих параметров конструктора является. Что такое Class<?>
или JavaType valueType
для Jackson? Это просто из-за того, что Java не имеет повторно генерируемых дженериков, а Джексону нужна дополнительная информация о родовом типе, который вы создаете?Что такое Класс <?> или VC JavaType ValueType используется в конструкторе StdDeserializer Джексона
Q
Что такое Класс <?> или VC JavaType ValueType используется в конструкторе StdDeserializer Джексона
3
A
ответ
2
Jackson соответствует структурам JSON с классами java. Так же, как JAXB отображает классы java для XSD-s.
Итак, этот Class<?>
(или JavaType) определяет, какой класс java принадлежит этому десериализатору. Эти классы Java могут быть любыми, у которых есть правильные аннотации, например @JsonProperty
.
Другой вопрос: почему этот класс является общим? Это связано с тем, что [java.lang.Class][1]
является общим. Если вы хотите, чтобы сделать это правильно, то вы определяете это следующим образом:
StdDeserializer serializer = new StdDeserializer(YourClass.class);
Дело в том, что StdSerializer
не связан классы, которые можно указать.
Но если вы знаете, что у вас есть тип типа T, этого недостаточно, чтобы назвать тип класса? Вы знаете, что это класс, поэтому вам не нужен класс, который нужно передать отдельно. –
zjuhasz
Типичный тип 'T' достаточно, если вам это нужно только в ** время компиляции **. Если вам это нужно и в ** runtime **, то вам нужен токен класса времени выполнения. Например. 'java.util.EnumSet' использует его:' EnumSet.noneOf (YourEnum.class) ' –
О, конечно, спасибо! – zjuhasz