Каково влияние избыточных операторов импорта в Java? - PullRequest
6 голосов
/ 18 декабря 2011

На что влияют избыточные операторы java import?

Влияют ли они на скомпилированную среду выполнения (производительность / размер)?или просто что-то вроде intellisense?

Чтобы задать вопрос по-другому: насколько важно их удалить?

Ответы [ 5 ]

14 голосов
/ 18 декабря 2011

Операторы импорта влияют только на то, что происходит во время компиляции.

Компилятор берет этот код и создает файл .class, который представляет ваш код в исполняемом формате (что-то в двоичном формате).

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

Давайте рассмотрим простой случай:

import java.util.*;

против

import java.util.ArrayList;
import java.util.List;

при использовании в:

//...
List <String> someList = new ArrayList <String> ();
//...

Когда компилятор встречает слово List, в первом случае ему необходимо выяснить, существует ли List в этом наборе классовили нет.Во втором случае это уже дано явно, так что это намного проще.

По сути, происходит то, что компилятор должен принимать все классы, существующие в операторах import, и отслеживать их имена так,что, если вы используете его, компилятор может затем извлечь соответствующие функции, которые вы вызываете.

Иногда существуют классы с одинаковыми именами в нескольких пакетах.В этом случае (на что ссылается Томас) не следует использовать * для выбора всех классов в каталоге.

Лучше явно описать использование вашего класса.

3 голосов
/ 18 декабря 2011

Наличие избыточных операторов импорта не влияет на производительность. Это может сделать исходный код длиннее, чем должно быть, но это никак не повлияет на скомпилированный код. Сама Java импортирует ненужные файлы классов - см. Спецификация языка Java , раздел 7.5.5 :

Каждый модуль компиляции автоматически импортирует все открытые типы имена, объявленные в предопределенном пакете java.lang, как будто Объявление:
import java.lang.*;
появлялись в начале каждого модуль компиляции, следующий сразу за любым оператором пакета.

Раздел 7.5.2 говорит, что

Объявление типа импорт по требованию никогда не вызывает никаких других объявлений. быть в тени.

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

Как отмечали другие, любая достойная среда IDE (NetBeans, Eclipse и т. Д.) Удалит для вас неиспользуемый импорт.

2 голосов
/ 18 декабря 2011

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

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

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

1 голос
/ 18 декабря 2011

Важно удалить их, потому что они добавляют раздувание к файлу .java и потому что избавиться от них в данном файле быстро и дешево, особенно если вы используете IDE ( CTRL - SHIFT - O , я полагаю, является ярлыком в Eclipse).

Что касается «Что делает избыточный импорт для машины», ну, недействительно много.Сам класс будет добавлен в соответствующий файл jar только один раз, и он будет загружен только один раз для каждого класса (см. Раздел «Для каждого класса»), за исключением добавленияНекоторое тривиальное время для компиляции не окажет существенного долгосрочного влияния на саму программу.

Тем не менее, это дешево и легко решить проблему: если вы не используетеIDE, тогда вы должны четко сгруппировать операторы импорта, которые в каком-то здравом порядке начинаются с (я размечаю по буквам мои, что означает, что я сразу же увижу два импорта java.util.Map, потому что они будут рядом друг с другом!).Если вы не исправите это, ваши коллеги-программисты будут активно выполнять эти требования, поэтому я полагаю, что это в ваших интересах.

1 голос
/ 18 декабря 2011

Самая большая опасность - столкновения пространства имен.Например, если две импортированные библиотеки имеют тип List, он может не использовать ту, которую вы считаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...