Ответ 1
@ConstructorProperties
используется для сопоставления параметров конструктора с методами получения и установки. Для этого он использует те же общие соглашения об именах, которые используются при создании методов получения и установки для полей.
Getter и присваиватель метод обычно создаются прописными буквами имени поля и предваряя get
или set
(или is
для булевого геттера). Пример использования отдельных букв не лучший, чтобы показать это.
Лучший пример: someValue
становится getSomeValue
Таким образом, в контексте свойств конструктора @ConstructorProperties({"someValue"})
означает, что первый параметр сопоставляется с получателями с именами getSomeValue
и setSomeValue
.
Помните, что имена параметров метода не видны во время выполнения. Это порядок параметров, который имеет значение. Имена параметров конструктора или какие поля на самом деле установлены, конструктор не имеет значения. Следующее будет по-прежнему ссылаться на метод с именем getSomeValue()
.
@ConstructorProperties({"someValue"})
public Point(int a) {
this.c = a;
}
Вариант использования для этой аннотации, кажется, (de-) сериализация неизменяемых объектов. Каркас получает все значения, используя объект getter, а затем сериализует объект. Когда объект должен быть десериализован, фреймворк должен создать новый экземпляр. Поскольку объект является неизменным, у него нет сеттеров. Конструктор - единственный способ установить эти значения, а аннотация используется, чтобы сообщить платформе, как построить сериализованный объект из сериализованных значений.