На нашем самом важном коде:
, Хотите верьте, хотите нет, FxCop преподает Вам адскую партию тому, как записать лучшему коду... большой инструмент! Таким образом для нас, все правила одинаково важны.
Ни у одного из них нет преимущества в производительности или распределении памяти - они оба будут компилироваться в один и тот же байт-код.
Оператор 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.
Выбранный вами импорт влияет только на время компиляции при разрешении имен классов.
Таким образом, единственные преимущества / недостатки относятся к удобочитаемости.
Импорт только необходимого вам минимума кажется лучше, потому что кто-то может посмотреть, что вы на самом деле используете. Тем не менее, IDE, вероятно, справится с этим, и это спорный вопрос.
Выполнение явного импорта безопаснее во время компиляции, так как нет возможности конфликта классов. например,
import java.sql.*;
import java.util.*;
вызывает проблему, если вы пытаетесь использовать класс Date (т.е. из какого пакета?).
Но кроме этого, нет аспекта производительности или памяти. Это чисто проблема времени компиляции.
Преимущество импорта с использованием символа «*» состоит в том, что это меньше строк кода и меньше ввода. Это более важно, если вы выполняете кодирование с помощью «тупого» текстового редактора, а не в среде IDE, чем можно использовать многоточие для скрытия импорта и можно полуавтоматически добавлять импорт.
К недостаткам импорта с использованием '*' относятся:
Любая приличная среда IDE вставит за вас операторы импорта и многое другое Кроме. Получите лучшую IDE, если это проблема для вас.
Это делает IntelliJ; как и Eclipse. Я сам не использую NetBeans, но готов поспорить, что это так.
Нет никакой разницы в распределении памяти или производительности для вашего приложения; Операторы импорта вообще не влияют на вашу программу во время выполнения. Это просто директивы, сообщающие компилятору, где (в каких пакетах) искать классы.
Однако лучше избегать синтаксиса подстановочных знаков и всегда использовать определенный импорт. Это позволит избежать проблем, связанных с совместимостью будущих версий библиотек с вашей программой.
Предположим, вы используете версию 1.0 некоторой библиотеки в своей программе, и вы делаете import somelibrary. *;
. Предположим, в вашей программе есть класс с именем X
. Теперь выходит версия 1.1 библиотеки, и вы хотите ее использовать. Предположим, что случайно появился новый класс с именем X
в версии 1.1 библиотеки.
Если вы использовали синтаксис с подстановочными знаками, вы внезапно также импортируете X
из библиотеки. Тогда компилятор выдаст вам ошибку, потому что в вашей программе уже есть класс X
, и компилятор не может отличить ваши X
и X
от библиотека.
Если вы импортируете из библиотеки только те классы, которые вам действительно нужны, то у вас не возникнет этой проблемы, потому что вы не будете автоматически импортировать X
из версии 1.1 библиотеки.