Почему плохо использовать подстановочный знак с оператором импорта Java? - PullRequest
354 голосов
/ 29 сентября 2008

Гораздо удобнее и понятнее использовать одно выражение типа

import java.awt.*;

чем импортировать кучу отдельных классов

import java.awt.Panel;
import java.awt.Graphics;
import java.awt.Canvas;
...

Что не так с использованием подстановочного знака в операторе import?

Ответы [ 14 ]

2 голосов
/ 18 марта 2018
  • Не оказывает влияния время выполнения, так как компилятор автоматически заменяет * конкретными именами классов. Если вы декомпилируете файл .class, вы никогда не увидите import ...*.

  • C # всегда использует * (неявно), поскольку вы можете только using имя пакета. Вы никогда не можете указать имя класса вообще. Java вводит эту функцию после c #. (Java очень сложен во многих аспектах, но это выходит за рамки этой темы).

  • В Intellij Idea, когда вы «организуете импорт», он автоматически заменяет несколько импортов одного пакета на *. Это обязательная функция, так как вы не можете отключить ее (хотя вы можете увеличить порог).

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

2 голосов
/ 21 декабря 2017

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

2 голосов
/ 20 сентября 2016

Наиболее важным является то, что импорт java.awt.* может сделать вашу программу несовместимой с будущей версией Java:

Предположим, что у вас есть класс с именем "ABC", вы используете JDK 8 и импортируете java.util.*. Теперь предположим, что выходит Java 9 с новым классом в пакете java.util, который по стечению обстоятельств также называется «ABC». Ваша программа теперь не будет компилироваться на Java 9, потому что компилятор не знает, подразумевается ли под именем «ABC» ваш собственный класс или новый класс в java.awt.

У вас не возникнет такой проблемы, если вы импортируете только те классы, которые явно используются из java.awt, которые вы фактически используете.

Ресурсы:

Импорт Java

0 голосов
/ 07 февраля 2019

Для записи: При добавлении импорта вы также указываете свои зависимости.

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

...