Gson универсальная коллекция интерфейса

1

У меня есть следующий метод с Serializable как самоопределяемый интерфейс:

private <T extends Synchronizable> Collection<T> deserialize(String json, Class<T> type) {
  Type collectionType = new TypeToken<ArrayList<T>>(){}.getType();
  return new Gson().fromJson(json, collectionType);
}

Этот метод не работает должным образом, поскольку Gson ожидает, что маркер типа имеет определенный общий тип, например Type collectionType = new TypeToken<ArrayList<Group>>(){}.getType(); (в то время как Group реализует Serializable).

Кто-нибудь знает решение этой проблемы, или я не могу использовать общие методы в этом месте, что было бы неудобно.

Теги:
generics
deserialization
serialization
gson

1 ответ

0

Вы должны использовать параметр type который вы принимаете там, как в:

  private <T extends Synchronizable> Collection<T> deserialize(String json, Class<T> type){
        Type collectionType = new TypeToken<ArrayList<Class<T>>>(){}.getType();
         return new Gson().fromJson(json, collectionType);
  }
  • 0
    это не компилируется, так как type не может быть преобразован в тип.
  • 0
    @Benny Тогда просто используйте необработанный Class<T> . Смотрите мое обновление
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню