Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

В чём разница между «import java.util.*» и «import java.util.Scanner»

#java #import


Вместо Scanner может быть что угодно - суть ясна. А именно: зачем использовать второй
вариант, если первый и набирать короче, и пригодится когда понадобится что-то ещё из
java.util? Изучаю Java и во многих примерах из книг и статьях в интернете используется
второй вариант импорта, но нигде не видел объяснения почему именно так. Наверное, у
него есть какие-то преимущества перед первым?
    


Ответы

Ответ 1



Потому что в Java импорты нужны для разделения классов. Понятнее будет на примере. Допустим есть класс com.blabla.Scanner и вы написали import com.blabla.*;. А потом вам захотелось добавить импорт от java.util.Scanner и вы опять написали import java.util.*;. В этом случае, если вы в коде напишете Scanner, компилятор не поймет какой именно Scanner вам нужен. Полная запись импорта это не допустит Помню, как-то добавил импорт от android.support.v7.widget.* и android.widget.*;. Когда я написал Toolbar IDE как раз и заругалась, так как он есть в обоих пакетах. Добавил к v7.widget.Toolbar и все.

Ответ 2



Аргументы за и против обоих вариантов есть в ответах к этому вопросу. Там же, в комментариях к ответам, сплошной холивар по поводу того, что "это не повод так делать, а делать наоборот - повод есть". Выделить оттуда можно такие моменты. За импорт всего пакета: Не приходится писать огромное количество импортов, а читающему - их пролистывать В плане производительность разницы нет Конфликты имён встречаются не часто и довольно просто разрешаются "Так советуют делать в книгах". В качества примера приводится отрывок из книги "Clean Code" Robert C. Martin. За достоверность отрывка не ручаюсь. За перечисление конкретных классов: Не происходят конфликты имён при импорте класса только из одного пакета. Причём речь идёт не только про первоначальную разработку кода, но и про переход на более новую версию Java. Коронным примером является переход с JDK 1.1 на 1.2 и import java.util.*; с import java.awt.*; при использовании List. Возможность понять к какому пакету относится класса при чтении кода без IDE Если в классе много импортов, то, вероятно, этот класс делает больше, чем должен В современных IDE можно скрыть блок импортов, чтобы не приходилось их пролистывать В итоге всё сводится к тому, что каждый решает для себя сам какой подход ему использовать. Лучшего решения нет, о чём, в том числе, свидетельствует бесконечный спор на эту тему.

Ответ 3



java.util.* - импортируешь все, что есть в библиотеке import java.util.Scanner - импортируешь конкретно Scanner

Комментариев нет:

Отправить комментарий