Является ли конструктор по умолчанию без аргументов обязательным для Gson?
Gson руководство пользователя заявляет, что мы должны определить конструктор по умолчанию без аргументов для любого класса для правильной работы с Gson. Еще больше, вJavadoc на ГсонаInstanceCreator
класс сказал, что будет выдано исключение, если мы попытаемся десериализовать экземпляр класса, в котором отсутствует конструктор по умолчанию, и мыдолжен использованиеInstanceCreator
в таких случаях. Тем не менее, я попытался протестировать использование Gson с классом, в котором отсутствует конструктор по умолчанию, и сериализация и десериализация работают без проблем.
Вот кусок кода для десериализации. Класс без конструктора без аргументов:
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 без необходимости иметь конструктор по умолчанию или есть обстоятельства, когда он не будет работать?