Я хочу получить переменную типа универсального класса для JsonDeserialize.
Class Data<T> {
private T data;
}
Class DataType {
private String dummy;
}
Class dataTypeClass = DataType.class;
// I want get this.
Class dataClass = Data<dataTypeClass>.class;
Пробовал вот так, не работает.
Могу ли я получить Data.class ??
Какую библиотеку вы используете? Джексон?
@ Лино, да. Я использовал Джексион
Это интересно. Я мог бы решить проблему хакерским способом, которым я бы не стал делиться с кем-то, кто этого не понимает, но я не смог найти ничего, где Джексон помог бы с этим.
Если вы используете Jackson в качестве своей библиотеки. Вы можете просто использовать TypeReference
:
TypeReference<Data<DataType>> r = new TypeReference<Data<DataType>>() {};
...
Data<DataType> data = objectMapper.readValue(json, r);
Этот код создаст новый анонимный подкласс TypeReference
, параметризованный <Data<DataType>>
. Этот класс внутренне использует «хакерский обход», чтобы получить общий параметр, который затем подбирается Джексоном для десериализации вашего JSON.
Могу ли я получить TypeReference от Class variable
??
@LKC, тогда вы можете просто вызвать objectMapper.readValue(json, variable)
, если у вас уже есть Class
Возможный дубликат Получить общий тип класса во время выполнения