Почему вызов метода доступа к записи внутри компактного конструктора возвращает значения полей по умолчанию?JAVA

Программисты JAVA общаются здесь
Anonymous
Почему вызов метода доступа к записи внутри компактного конструктора возвращает значения полей по умолчанию?

Сообщение Anonymous »

Я экспериментирую с записями Java и компактными конструкторами.
Учитывая эту запись:

Код: Выделить всё

public record Point(double x, double y) {

public Point {
if (x > y) {
System.out.println(this.x());
}
}

public void printXAndY() {
System.out.printf("X: %.2f; Y: %.2f%n", this.x, this.y);
}
}
Когда я создаю:

Код: Выделить всё

new Point(5.0, 3.0);
Вывод: Однако, если я попытаюсь прочитать поле напрямую:

Код: Выделить всё

System.out.println(this.x);
Компилятор сообщает об ошибке, сообщающей, что поле невозможно прочитать.

Насколько я понимаю, следующее:
  • В компактном конструкторе поля назначаются после тела конструктора.
  • Поэтому чтение this.x незаконно, поскольку он еще не инициализирован.
  • Но вызов this.x() успешно компилируется.
    />
  • Во время выполнения он возвращает 0,0, что, по-видимому, является значением поля по умолчанию.
Мой вопрос: почему вызов метода доступа (this.x()) возвращает значение поля по умолчанию вместо параметра конструктора?

Подробнее здесь: https://stackoverflow.com/questions/798 ... -default-f

Вернуться в «JAVA»