2016-09-09 6 views
3

Я делаю пользовательский десериализатор (простирающуюся StdDeserializer) с помощью Jackson JSON library, и я не могу понять, что цель этих параметров конструктора является. Что такое Class<?> или JavaType valueType для Jackson? Это просто из-за того, что Java не имеет повторно генерируемых дженериков, а Джексону нужна дополнительная информация о родовом типе, который вы создаете?Что такое Класс <?> или VC JavaType ValueType используется в конструкторе StdDeserializer Джексона

ответ

2

Jackson соответствует структурам JSON с классами java. Так же, как JAXB отображает классы java для XSD-s.

Итак, этот Class<?> (или JavaType) определяет, какой класс java принадлежит этому десериализатору. Эти классы Java могут быть любыми, у которых есть правильные аннотации, например @JsonProperty.

Другой вопрос: почему этот класс является общим? Это связано с тем, что [java.lang.Class][1] является общим. Если вы хотите, чтобы сделать это правильно, то вы определяете это следующим образом:

StdDeserializer serializer = new StdDeserializer(YourClass.class); 

Дело в том, что StdSerializerне связан классы, которые можно указать.

+0

Но если вы знаете, что у вас есть тип типа T, этого недостаточно, чтобы назвать тип класса? Вы знаете, что это класс , поэтому вам не нужен класс, который нужно передать отдельно. – zjuhasz

+0

Типичный тип 'T' достаточно, если вам это нужно только в ** время компиляции **. Если вам это нужно и в ** runtime **, то вам нужен токен класса времени выполнения. Например. 'java.util.EnumSet' использует его:' EnumSet.noneOf (YourEnum.class) ' –

+0

О, конечно, спасибо! – zjuhasz