Десериализация неизменного списка с помощью GSON - PullRequest
0 голосов
/ 28 марта 2020

Я использую неизменный список 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, кажется, что тип класса должен быть указан во время компиляции, поэтому нельзя ли написать общий десериализатор для всех типов?

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