As of Gson 2.3.1.
Независимо от того, что говорит документация Gson, если ваш класс не имеет конструктора no-args, и вы не зарегистрировали никаких объектов InstanceCreater
, то это создаст объект ObjectConstructor
(который строит ваш объект) с помощью UnsafeAllocator
, который использует Reflection для получения метода allocateInstance
класса sun.misc.Unsafe
для создания экземпляра вашего класса.
Этот Unsafe
класс обходит отсутствие конструктора no-args и имеет много других опасных применений . allocateInstance
states
Выделить экземпляр, но не запускать какой-либо конструктор. Инициализирует класс, если он еще не был.
blockquote>Так что на самом деле он не нужен конструктор и обойдет ваш два конструктора аргументов. См. Некоторые примеры здесь .
Если у вас есть конструктор no-args, Gson будет использовать
ObjectConstructor
, который использует это значение по умолчаниюConstructor
, вызываяyourClassType.getDeclaredConstructor(); // ie. empty, no-args
Мои 2 цента: следуйте тому, что говорит Gson, и создайте свои классы с помощью конструктора no-arg или зарегистрируйте
InstanceCreator
. Вы можете оказаться в плохом положении, используяUnsafe
.