Могу ли я создать экземпляр суперкласса и создать конкретный подкласс на основе предоставленных параметров - PullRequest
1 голос
/ 21 июня 2011

Я использую пакет Google GSON http://code.google.com/p/google-gson/

Я конвертирую JSON в Java.

У меня есть этот фрагмент кода, где я выполняю преобразование.

Gson gson = new Gson();
Type collectionType = new TypeToken<Collection<QueryProperty>>() {}.getType();
Collection<QueryProperty> queryProperties = gson.fromJson(query, collectionType);

Мой класс QueryProperty имеет следующие поля (с геттерами / сеттерами):

int id;
String uri;
String name;
Set<QueryValue> values;
String selected;

Класс QueryValue имел следующие поля (с геттерами / сеттерами), очевидно:

int id;
String uri;
String name;

Я хочу сейчасчтобы иметь возможность иметь различное types QueryValue.

Я хочу добавить класс NumericQueryValue (подкласс QueryValue), чтобы я мог передать набор границ, с которыми запрашивать БД.

double lower;
double upper;

И хочу создать новый ResourceQueryValue (подкласс QueryValue), который выглядит так же, как QueryValue, используемый для:

int id;
String uri;
String name;

Есть ли в любом случае, я могу сделать эту работу.Это имеет общий класс QueryValue, но верный подкласс возвращается в зависимости от параметров, которые предоставляет JSON.

Если я не совсем уверен, пожалуйста, дайте мне знать.

Ответы [ 2 ]

2 голосов
/ 21 июня 2011

У Gson в настоящее время нет простого механизма полиморфной десериализации, кроме реализации пользовательской обработки десериализации. Похоже, что следующая версия предоставит встроенное решение.

Предыдущие вопросы и ответы StackOverflow.com (некоторые с примерами) на эту тему:

1 голос
/ 21 июня 2011

Похоже, вы хотите создать пользовательский десериализатор , если вам нужно проверить значения, или создатель экземпляра , если вам нужно только создать экземпляр на основе типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...