вопрос про массивов

83
08 июля 2021, 03:30

В одном тесте я встретил пункты

  • array.length

  • array.length()

конечно я знаю, что правильный из них это array.length, но решил за интерес поэкспериментировать в Intellij Idea.

Взял и намеренно поставил скобки после length и самое интересное, описание ошибки компилятора меня удивило...

Описание ошибки такое "method call expected"

Вроде по правилам, вызов метода предполагает наличие скобок, только поля не имеют скобок.

Решил посмотреть, что пишет Intellij когда я просто ставлю точку после array. в списке приводит пункт "length" а значок не "m" а "f"... в смысле функция?

И тут у меня появился вопрос:

Почему length без скобок считается методом со стороны компилятора если оно не имеет скобок?

Answer 1

Обращясь к переменным (полям) скобки не ставятся, они необходимы только при вызове функций (методов), куда должны передаваться параметры (или не должны, в зависимости от самой функции).

В объектно-ориентированных языках можно различать подобные вещи ещё по именам. Как правило, если вам требуется какое-либо свойство объекта (в данном случае, длина массива), и если это свойство объявлено у него как private, то разработчики составляют ему соответствующие методы доступа геттеры и сеттеры. Для длины это было бы getLength(). Но так как в классе объекта массива поле length объявлено как public обращение к нему не нуждается в геттерах и сеттерах.

READ ALSO
Как готовиться к собеседованию на позицию java middle? [закрыт]

Как готовиться к собеседованию на позицию java middle? [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах

115
Как работать с римскими числами на java

Как работать с римскими числами на java

Всем привет! Есть задание: написать калькулятор

133
Альтернатива переопределения enum

Альтернатива переопределения enum

Стоит задача парсить нескдесятков сайтов, большая часть селекторов которых идентична

109