В одном тесте я встретил пункты
array.length
array.length()
конечно я знаю, что правильный из них это array.length, но решил за интерес поэкспериментировать в Intellij Idea.
Взял и намеренно поставил скобки после length и самое интересное, описание ошибки компилятора меня удивило...
Описание ошибки такое "method call expected"
Вроде по правилам, вызов метода предполагает наличие скобок, только поля не имеют скобок.
Решил посмотреть, что пишет Intellij когда я просто ставлю точку после array. в списке приводит пункт "length" а значок не "m" а "f"... в смысле функция?
И тут у меня появился вопрос:
Почему length без скобок считается методом со стороны компилятора если оно не имеет скобок?
Обращясь к переменным (полям) скобки не ставятся, они необходимы только при вызове функций (методов), куда должны передаваться параметры (или не должны, в зависимости от самой функции).
В объектно-ориентированных языках можно различать подобные вещи ещё по именам. Как правило, если вам требуется какое-либо свойство объекта (в данном случае, длина массива), и если это свойство объявлено у него как private
, то разработчики составляют ему соответствующие методы доступа геттеры и сеттеры. Для длины это было бы getLength()
. Но так как в классе объекта массива поле length
объявлено как public
обращение к нему не нуждается в геттерах и сеттерах.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах
Стоит задача парсить нескдесятков сайтов, большая часть селекторов которых идентична