Я использую неизменный список guava в своей модели данных и использую GSON для преобразования из / в JSON.
Все объекты в списке реализуют один интерфейс; для каждого интерфейса я определил свой собственный десериализатор.
Для каждого типа класса / интерфейса, для которого требуется неизменный список, я создал собственный JSONDeserializer, как показано ниже
.registerTypeAdapter( // Adapter for ImmutableList<MyClass1>
new TypeToken<ImmutableList<MyClass1>>() {}.getType(),
(JsonDeserializer<ImmutableList<MyClass1>>) (jsonString, typeOfT, context) -> ImmutableList.copyOf(
(List) context.deserialize(jsonString, new TypeToken<ArrayList<MyClass1>>() {}.getType())
)
)
Этот фрагмент кода повторяется для каждого типа класса / интерфейса, для которого требуется список. Если я его не предоставлю, десериализация logi c завершится неудачно с «попыткой вызова ImmtableList с пустыми аргументами».
Вопрос: Есть ли способ, которым я могу захватить MyClass1 в общий тип c и избежать дублирования? Из того, что я прочитал в inte rnet, кажется, что тип класса должен быть указан во время компиляции, поэтому нельзя ли написать общий десериализатор для всех типов?