Почему вызов метода доступа к записи внутри компактного конструктора возвращает значения полей по умолчанию?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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