История изменений
Исправление 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()) и если ты потерял её на сериализации - это только твои проблемы.