Gson - преобразовать из Json в типизированный ArrayList
Используя библиотеку Gson, как мне преобразовать строку JSON в ArrayList пользовательский класс JsonLog? По сути, JsonLog это интерфейс, реализованный различными видами журналов, создаваемых моим приложением для Android - журналами SMS, журналами вызовов, журналами данных - и это ArrayList представляет собой их совокупность. Я продолжаю получать ошибку в строке 6.
publicstaticvoidlog(File destination, JsonLog log) { Collection<JsonLog> logs = null; if (destination.exists()) { Gsongson=newGson(); BufferedReaderbr=newBufferedReader(newFileReader(destination)); logs = gson.fromJson(br, ArrayList<JsonLog>.class); // line 6 // logs.add(log); // serialize "logs" again } }
Кажется, компилятор не понимает, что я имею в виду типизированный ArrayList. Что мне делать?
Переведено автоматически
Ответ 1
Вы можете использовать TypeToken для загрузки строки json в пользовательский объект.
Java пока не предоставляет способа представления универсальных типов, поэтому этот класс предоставляет. Заставляет клиентов создавать подкласс этого класса, который позволяет извлекать информацию о типе даже во время выполнения.
Например, чтобы создать литерал типа для List<String>, вы можете создать пустой анонимный внутренний класс:
TypeToken<List<String>> list = new TypeToken<List<String>>() {};
Этот синтаксис нельзя использовать для создания литералов типа, которые имеют подстановочные параметры, такие как Class<?> или List<? extends CharSequence>.
Kotlin:
Если вам нужно сделать это в Kotlin, вы можете сделать это следующим образом: