Руководство пользователя Gson утверждает, что мы должны определить конструктор по умолчанию no-args для любого класса, который будет работать с Gson правильно. Более того, в javadoc в классе Gson InstanceCreator
сказано, что исключение будет выбрано, если мы попытаемся десериализовать экземпляр класса, отсутствующего конструктор по умолчанию, и мы должны использовать InstanceCreator
в таких случаях. Тем не менее, я попытался проверить использование Gson с классом, не имеющим конструктора по умолчанию, и обе сериализации и десериализации работают без проблем.
Вот фрагмент кода для deserializaiton. Класс без конструктора без аргументов:
public class Mushroom {
private String name;
private double diameter;
public Mushroom(String name, double diameter) {
this.name = name;
this.diameter = diameter;
}
//equals(), hashCode(), etc.
}
и тест:
@Test
public void deserializeMushroom() {
assertEquals(
new Mushroom("Fly agaric", 4.0),
new Gson().fromJson(
"{name:\"Fly agaric\", diameter:4.0}", Mushroom.class));
}
который отлично работает.
Итак, мой вопрос: Могу ли я использовать Gson без необходимости иметь конструктор по умолчанию или есть какие-то обстоятельства, когда он не будет работать?