Страницы

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

суббота, 21 декабря 2019 г.

“Звездочки” в import - хорошо ли использовать ?

#java


Например, вместо
import com.smartgwt.client.widgets.layout.VLayout;
import com.smartgwt.client.widgets.layout.HLayout;

можно писать
import com.smartgwt.client.widgets.layout.*;

и все работает. 
Хорошо ли это (использовать '*') ? 
Возникает ли дополнительная нагрузка на компилятор (на глаз не ощущается), объем
подключаемого кода (не исследовал) и т.п. ?    


Ответы

Ответ 1



Интересной и неприятной стороной импорта всех классов из пакета может стать ситуация, когда в пакет добавляются классы: package a; import b.*; // тут есть класс B import c.*; // тут есть класс С public class A { public A() { new B(); new C(); } } Фокус произойдет, если в пакет b добавится вдруг класс С - наш класс перестанет компилироваться. Обновили какую-нибудь библиотеку и бац - ни с того, ни с сего. Еще бывает ситуации, когда неясно, из какого именно пакета импортирован класс. Минусом поименного импорта является большое "полотно" собственно импортов - но оно практически всегда скрыто ("collapsed") в редакторе. Cам я, честно говоря, этим никогда не заморачивался - Eclipse импортирует поименно - и пусть себе импортирует. Мне кажется, минусы любого подхода сейчас хорошо компенсируются современными IDE.

Ответ 2



Все должно быть в разумных пределах. Если нужно один класс импортировать, то можно и написать его полный путь, но когда в импорте перечисляется половина классов модуля, то какой смысл? Хотя некоторые эстеты найдут это правильным. Нагрузка на компилятор? Сложно что то сказать, и никогда не слышал, что бы кто то это исследовал, но вот повыбрасывать явно лишние импорты - стоит (может по этой причине и импортируют все явно?) А вот будет ли больше объем подключаемого кода? я думаю компилятор может все очень хорошо оптимизировать.

Ответ 3



Возможно я не прав, но если я не ошибаюсь, то нагрузки на компилятор вообще никакой от этих строк нет. Компилятор не включает указанные классы в саму программу (.jar файл). Это всего навсего ссылки, по которым виртуальная машина будет искать классы в процессе выполнения программы. То есть если если и есть лишняя нагрузка, то только в рантайме. И еще, иногда могут встречаться такие ситуации (пример на вскидку привести не могу, но такое может случится), когда в разных пакетах лежат классы с одинаковыми именами. О таких ситуациях стоит помнить, когда вы ставите много *.

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

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