Пакет импорта.* по сравнению с пакетом импорта. SpecificType [дубликат]

93
задан Joachim Sauer 29 October 2012 в 15:31
поделиться

9 ответов

Нет производительности или накладных расходов к выполнению импорта.* по сравнению с импортом определенных типов. Однако я полагаю, что это, чтобы быть лучшей практикой, чтобы никогда использовать импорт.* Моя основная причина этого являюсь я точно так же, как, чтобы сохранить вещи straightward, убрать и с как можно меньшей неоднозначностью, и я думаю с импортом.*, Вы теряете это.

93
ответ дан shsteimer 24 November 2019 в 06:12
поделиться

Смотрите на API Java, и Вы будете видеть много классов и интерфейсов с тем же именем в различных пакетах.

, Например:

java.lang.reflect.Array
java.sql.Array

Так, если Вы импортируете java.lang.reflect.* и java.sql.*, Вы будете иметь коллизию на Типе массива и иметь для полного определения их в коде.

Импортирующие определенные классы вместо этого сохранят Вас эта стычка.

112
ответ дан Luiggi Mendoza 24 November 2019 в 06:12
поделиться

Это - на самом деле очень плохая проблема.

предположим Вы пишете

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 файлы.

29
ответ дан Scott Stanchfield 24 November 2019 в 06:12
поделиться

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

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

9
ответ дан Community 24 November 2019 в 06:12
поделиться

После поиска дополнительной информации я столкнулся с этим веб-сайтом, где это очень хорошо объяснено. выпуск и Импорта Делает использование * в производительности влияния оператора импорта? .

там какая-либо проблема эффективности между этими двумя стилями? Возможно, но так как объявления импорта ничего на самом деле не импортируют в Вашу программу, любое различие является очень небольшим. Помните, что существует неявный импорт 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.

9
ответ дан Juan Carlos Blanco Martínez 24 November 2019 в 06:12
поделиться

Я склонен использовать независимо от того, что значение по умолчанию IDE. Я нахожу, что это не что-то действительно стоящее вызвать беспокойство о том, так как это не оказывает влияния производительности, и зависимости от проверки могут быть обработаны со множеством инструментов.

3
ответ дан Rontologist 24 November 2019 в 06:12
поделиться

Импорт не имеет значения на уровне байт-кода, таким образом, не должно быть никакого различия во время выполнения.

я нахожу, лучше: a) Быть явными путем списка всего импорта b) Позволяют IDE управлять им. Любой из главных IDE может автоматически обновить, отсортировать и завершить Ваш импорт.

я нашел, что a) пригождается пару раз при выполнении руководства, повторно упаковывающего вне контекста рефакторинга в IDE. Как, например, когда маркетинг меняет имя Вашего продукта и решает, все Ваши пакеты должны изменить имя.

2
ответ дан Alex Miller 24 November 2019 в 06:12
поделиться

Взгляд меньшинства: В моем коде я склонен использовать тонны классов из нескольких пакетов вместе с несколькими недельными классами здесь и там. Мне нравится держать свой список импорта маленькими, поэтому могу сказать, что происходит с первого взгляда. Для этого я установил порог в 4 классах. Выше, Eclipse будет использовать * для моего кода. Я нахожу, что это держит мою пакет импортировать читаемость, и я склонен ссылаться на них как первым, что я делаю , когда я смотрю на класс, чтобы ответить на вопрос: кто это говорит об этом?

Имя столкновение: Каковы шансы, которые вы импортируете четыре или более классов из двух пакетов, которые имеют конкурирующие названия классов? Если это более 10% времени, вы, возможно, захотите рассмотреть количество пакетов, которые ваш класс опирается на (например, рефакторинг в меньших классах).

13
ответ дан 24 November 2019 в 06:12
поделиться

Это скорее хорошая практика кодирования, поскольку любой, кто читает ваш код, немедленно узнает, какие классы используются определенным классом, просто глядя на импортный блок в верхней части файла, тогда как бы Чтобы выкопать, чтобы узнать, если вы использовали подстановочные знаки.

1
ответ дан 24 November 2019 в 06:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: