Не понимаю @ConstructorProperties
о @ConstructorProperties
документация говорит "аннотация конструктора, которая показывает, как параметры этого конструктора соответствуют методам геттера построенного объекта". И это дает пример, который неоднозначен, потому что имена переменных идентичны параметрам.
Я действительно не понимаю, почему @ConstructorProperties({"x", "y"})
относится к добытчики getX()
и getY()
. Случай x и y не согласуется с аннотацией.
Итак, чтобы уточнить, что должно будьте аннотацией для конструктора в этом коде:
public class Point {
public Point(int a, int b) {
this.c = a;
this.d = b;
}
public int getCc() {
return c;
}
public int getDd() {
return d;
}
private final int c, d;
}
(я отредактировал код, потому что из ответа я понимаю, что аннотация ожидает, что код будет следовать соглашению общего случая для геттеров, например cc
геттер должен быть getCc()
. Но я держу нарочно, для двусмысленности, разницу между именем геттера и фактической переменной)
второй вопрос...
@ConstructorProperties(value="text")
что означает эта аннотация, для JButton (текст строки)?
кажется, предусмотрено для использования инструментами, но просто хочу понять.
1 ответов
@ConstructorProperties
использует общие соглашения об именах для сопоставления аргументов конструктора с методами getter и setter. Имена методов Getter и setter обычно создаются путем заглавной буквы имени свойства и добавления get или set (или is для логических геттер). Пример использования одиночных букв не является лучшим, хотя, чтобы показать это.
пример: someValue
становится getSomeValue
имейте в виду, что имена параметров метода не отображается во время выполнения. Важен порядок параметров. Имена свойств и переменных, используемых в конструкторе, не имеют значения. Ниже все равно будет ссылаться на метод с именем getSomeValue()
.
@ConstructorProperties({"someValue"})
public Point(int a) {
this.c = a;
}
прецедентом для этой аннотации является (де-)сериализация неизменяемых объектов. Платформа получает все значения с помощью геттера объектов, а затем сериализует объект. Когда объект должен быть десериализован, платформа должна создать новый экземпляр. Потому что объект неизменен, однако у него нет никаких сеттеров. Конструктор-единственный способ установить эти значения, и аннотация используется для указания фреймворку, как построить сериализованный объект из сериализованных значений.