Страницы

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

четверг, 19 декабря 2019 г.

Почему для static-метода нельзя опустить имя класса?

#java


Доброго времени суток.

Имеется пример метода, сортирующего список, в рамках которого используются статические
методы sort() и reverseOrder(). Они записаны со ссылкой на класс Collections:

Collections.sort(copy, Collections.reverseOrder());


Если метод sort() встречается во многих классах и без уточняющей ссылки на Collections
не обойтись, то метод reverseOrder() представлен лишь в одном экземпляре. Почему, в
таком случае, запись:

Collections.sort(copy, reverseOrder());


будет неверна?

Благодарю.
    


Ответы

Ответ 1



Данная проблема решается статическим импортированием: import static java.util.Collections.reverseOrder; В противном случае, необходимо при компиляции обойти все классы в classpath и проверить наличие там данной функции.

Ответ 2



Касательно Вашего вопроса я вижу несколько проблем, на которые компилятор может наткнуться: во-первых это поиск по всем классам (довольно тяжеловесная задача, учитывая сколько раз её придется выполнять), во-вторых это разрушение области видимости (представьте, вы объявили переменную, которая называется так же, как один из методов в каком-либо из классов, как тогда поступать компилятору?). Вдобавок Вы можете просто опечататься и вызывать метод класса, о котором и не подозревали... Думаю, проблем можно придумать много, в то время когда польза минимальна (я бы даже сказал, что вреда такой фичей привнесено было бы гораздо больше).

Комментариев нет:

Отправить комментарий