LINUX.ORG.RU

История изменений

Исправление Nastishka, (текущая версия) :

Проблема такого кода ещё и в том, что тип T всё равно статический и поселить, например, кошек с собаками в один список не получится, даже если они ладят друг с другом в реальной жизни.

За базар ответишь? List of Animal очевидный ответ. Если у тебя приходит в JSONе список в котором есть и кошки и собаки - значит изначально это был список животных - List of Animal, а значит ты и должен восстанавливать в List of Animal который корректно принимает и экземпляры Cat и Dog.

Для того, чтобы всё работало правильно рано или поздно приходится добавлять в этот JSON дополнительную информацию о типах.

Разумеется приходится. И этим занимается сериализатор. И List превращается не в JSONArray, а в JSONObject у которого есть {«containerType»: «…», «items»: […]}

какой именно потомок Animal используется в каждом конкретном элементе списка

Информация о классе является неотъемлемым атрибутом объекта (this.getClass()) и если ты потерял её на сериализации - это только твои проблемы.

Исходная версия Nastishka, :

Проблема такого кода ещё и в том, что тип T всё равно статический и поселить, например, кошек с собаками в один список не получится, даже если они ладят друг с другом в реальной жизни.

За базар ответишь? List очевидный ответ. Если у тебя приходит в JSONе список в котором есть и кошки и собаки - значит изначально это был список животных - List, а значит ты и должен восстанавливать в List который корректно принимает и экземпляры Cat и Dog.

Для того, чтобы всё работало правильно рано или поздно приходится добавлять в этот JSON дополнительную информацию о типах.

Разумеется приходится. И этим занимается сериализатор. И List превращается не в JSONArray, а в JSONObject у которого есть {«containerType»: «…», «items»: […]}

какой именно потомок Animal используется в каждом конкретном элементе списка

Информация о классе является неотъемлемым атрибутом объекта (this.getClass()) и если ты потерял её на сериализации - это только твои проблемы.