Нет производительности или накладных расходов к выполнению импорта.* по сравнению с импортом определенных типов. Однако я полагаю, что это, чтобы быть лучшей практикой, чтобы никогда использовать импорт.* Моя основная причина этого являюсь я точно так же, как, чтобы сохранить вещи straightward, убрать и с как можно меньшей неоднозначностью, и я думаю с импортом.*, Вы теряете это.
Смотрите на API Java, и Вы будете видеть много классов и интерфейсов с тем же именем в различных пакетах.
, Например:
java.lang.reflect.Array
java.sql.Array
Так, если Вы импортируете java.lang.reflect.*
и java.sql.*
, Вы будете иметь коллизию на Типе массива и иметь для полного определения их в коде.
Импортирующие определенные классы вместо этого сохранят Вас эта стычка.
Это - на самом деле очень плохая проблема.
предположим Вы пишете
import a.*;
import b.*;
...
Foo f;
и класс, Foo существует в пакете a.
Теперь Вы регистрируетесь в своем отлично компилирующем коде, и шесть месяцев спустя, кто-то добавляет класс Foo к пакету b. (Возможно, это - сторонний lib, который добавил классы в последней версии).
Пуф! Теперь Ваш код отказывается компилировать.
Никогда не используют по запросу импортом. Это является злым!
См. http://javadude.com/articles/importondemandisevil.html для получения дополнительной информации.
производительность РЕ:
import a.*;
по сравнению с [1 113]
import a.X;
Не Имеет никакого значения во времени выполнения. Компилятор соединяет разрешенные имена классов проводами в сгенерированные .class файлы.
Серьезное основание никогда не использовать импорт xxx.* состоит в том, чтобы иметь ясное видение зависимости .
можно знать более быстрый, что Вы используете определенный класс другого пакета, потому что он перечислен прямо в начале исходного файла.
После поиска дополнительной информации я столкнулся с этим веб-сайтом, где это очень хорошо объяснено. выпуск и Импорта Делает использование * в производительности влияния оператора импорта? .
там какая-либо проблема эффективности между этими двумя стилями? Возможно, но так как объявления импорта ничего на самом деле не импортируют в Вашу программу, любое различие является очень небольшим. Помните, что существует неявный импорт java.lang.* во главе Ваших единиц компиляции и java.lang в JDK 1.2.2 содержит 75 классов и интерфейсы. Эксперимент с помощью изобретенного примера, один с тысячами использования имени класса, которое должно искаться, показал незначительное изменение в скорости компиляции. Таким образом, выполнение компиляции нельзя, вероятно, считать фактором при предпочитании одного формата по другому.
существует один заключительный угол процента по объявлениям импорта. Предположим, что Вы используете внутренний класс:
package P;
public class A {
public static class B {}
}
, Если Вы хотите получить доступ от другой единицы компиляции, Вы говорите:
import P.*;
или: импорт P.A; Но если требуется получить доступ к B без квалификации, необходимо сказать:
import P.A.*;
или: импорт P.A.B; первый из них делает доступным типы в классе A найденный в пакете P. Второе делает доступным просто тип B найденный в классе A в пакете P.
Я склонен использовать независимо от того, что значение по умолчанию IDE. Я нахожу, что это не что-то действительно стоящее вызвать беспокойство о том, так как это не оказывает влияния производительности, и зависимости от проверки могут быть обработаны со множеством инструментов.
Импорт не имеет значения на уровне байт-кода, таким образом, не должно быть никакого различия во время выполнения.
я нахожу, лучше: a) Быть явными путем списка всего импорта b) Позволяют IDE управлять им. Любой из главных IDE может автоматически обновить, отсортировать и завершить Ваш импорт.
я нашел, что a) пригождается пару раз при выполнении руководства, повторно упаковывающего вне контекста рефакторинга в IDE. Как, например, когда маркетинг меняет имя Вашего продукта и решает, все Ваши пакеты должны изменить имя.
Взгляд меньшинства: В моем коде я склонен использовать тонны классов из нескольких пакетов вместе с несколькими недельными классами здесь и там. Мне нравится держать свой список импорта маленькими, поэтому могу сказать, что происходит с первого взгляда. Для этого я установил порог в 4 классах. Выше, Eclipse будет использовать * для моего кода. Я нахожу, что это держит мою пакет импортировать читаемость, и я склонен ссылаться на них как первым, что я делаю , когда я смотрю на класс, чтобы ответить на вопрос: кто это говорит об этом?
Имя столкновение: Каковы шансы, которые вы импортируете четыре или более классов из двух пакетов, которые имеют конкурирующие названия классов? Если это более 10% времени, вы, возможно, захотите рассмотреть количество пакетов, которые ваш класс опирается на (например, рефакторинг в меньших классах).
Это скорее хорошая практика кодирования, поскольку любой, кто читает ваш код, немедленно узнает, какие классы используются определенным классом, просто глядя на импортный блок в верхней части файла, тогда как бы Чтобы выкопать, чтобы узнать, если вы использовали подстановочные знаки.