Какое-либо различие между импортом класса и пакетом импортирует в Java? [дубликат]

На нашем самом важном коде:

  • предупреждения Обработки как ошибки (уровень 4)
  • FxCop должен передать 100% (не обычно игнорирует позволяемый)
  • Жандарм используемый в качестве инструкции (иногда, это конфликтует с FxCop)

, Хотите верьте, хотите нет, FxCop преподает Вам адскую партию тому, как записать лучшему коду... большой инструмент! Таким образом для нас, все правила одинаково важны.

15
задан random 29 September 2011 в 14:26
поделиться

6 ответов

Ни у одного из них нет преимущества в производительности или распределении памяти - они оба будут компилироваться в один и тот же байт-код.

Оператор import сообщает компилятору, где чтобы найти классы, на которые ссылается исходный код.

Однако есть преимущество импорта только по классам. Если в двух пакетах есть класс с одним и тем же именем, может возникнуть конфликт относительно того, на какой класс идет ссылка.

Одним из таких примеров является класс java.awt.List и класс java.util.List .

Допустим, мы хотим использовать java.awt.Panel и java.util.List . Если источник импортирует пакеты следующим образом:

import java.awt.*;
import java.util.*;

Тогда ссылка на класс List будет неоднозначной:

List list; // Which "List" is this from? java.util? java.awt?

Однако, если один импортирует явно, то результат будет:

import java.awt.Panel;
import java.util.List;

List list; // No ambiguity here -- it refers to java.util.List.
26
ответ дан 1 December 2019 в 01:11
поделиться

Выбранный вами импорт влияет только на время компиляции при разрешении имен классов.

Таким образом, единственные преимущества / недостатки относятся к удобочитаемости.

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

6
ответ дан 1 December 2019 в 01:11
поделиться

Выполнение явного импорта безопаснее во время компиляции, так как нет возможности конфликта классов. например,

import java.sql.*;
import java.util.*;

вызывает проблему, если вы пытаетесь использовать класс Date (т.е. из какого пакета?).

Но кроме этого, нет аспекта производительности или памяти. Это чисто проблема времени компиляции.

2
ответ дан 1 December 2019 в 01:11
поделиться

Преимущество импорта с использованием символа «*» состоит в том, что это меньше строк кода и меньше ввода. Это более важно, если вы выполняете кодирование с помощью «тупого» текстового редактора, а не в среде IDE, чем можно использовать многоточие для скрытия импорта и можно полуавтоматически добавлять импорт.

К недостаткам импорта с использованием '*' относятся:

  • Иногда возникают конфликты имен импортированных классов; например, когда какое-то имя класса используется для классов в разных пакетах и ​​вы импортируете их оба.
  • Вы не можете увидеть явные зависимости классов, посмотрев на импорт. Но это менее важно, если ваша IDE может показать вам зависимости другим способом.
2
ответ дан 1 December 2019 в 01:11
поделиться

Любая приличная среда IDE вставит за вас операторы импорта и многое другое Кроме. Получите лучшую IDE, если это проблема для вас.

Это делает IntelliJ; как и Eclipse. Я сам не использую NetBeans, но готов поспорить, что это так.

0
ответ дан 1 December 2019 в 01:11
поделиться

Нет никакой разницы в распределении памяти или производительности для вашего приложения; Операторы импорта вообще не влияют на вашу программу во время выполнения. Это просто директивы, сообщающие компилятору, где (в каких пакетах) искать классы.

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

Предположим, вы используете версию 1.0 некоторой библиотеки в своей программе, и вы делаете import somelibrary. *; . Предположим, в вашей программе есть класс с именем X . Теперь выходит версия 1.1 библиотеки, и вы хотите ее использовать. Предположим, что случайно появился новый класс с именем X в версии 1.1 библиотеки.

Если вы использовали синтаксис с подстановочными знаками, вы внезапно также импортируете X из библиотеки. Тогда компилятор выдаст вам ошибку, потому что в вашей программе уже есть класс X , и компилятор не может отличить ваши X и X от библиотека.

Если вы импортируете из библиотеки только те классы, которые вам действительно нужны, то у вас не возникнет этой проблемы, потому что вы не будете автоматически импортировать X из версии 1.1 библиотеки.

2
ответ дан 1 December 2019 в 01:11
поделиться
Другие вопросы по тегам:

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