У меня есть следующий метод с 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
).
Кто-нибудь знает решение этой проблемы, или я не могу использовать общие методы в этом месте, что было бы неудобно.
Вы должны использовать параметр 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);
}
type
не может быть преобразован в тип.
Class<T>
. Смотрите мое обновление