Почему autoimport только пакет java.lang?

Я знаю, что пакет java.lang автоматически импортируется каждой написанной java-программой, поэтому все классы в ней автоматически доступны нам.

Мой вопрос: почему бы не импортировать auto java.util и другие пакеты? Это обязательно сохранит некоторую типизацию:)

Итак, объясните, почему это не сделано.

Ответы

Ответ 1

Хорошая причина не в том, чтобы слишком сильно автоимпортироваться - это избегать конфликтов пространства имен. Если все в java.util было импортировано автоматически, и тогда вы хотели бы обратиться к другому классу с именем "Карта", например, вам придется ссылаться на него по его полностью квалифицированному имени.

В ответ на другие ответы в этом потоке import фактически не изменяет внутреннее представление ваших файлов классов. Фактически, здесь приведена ссылка на спецификацию JVM, описывающую структуру файла класса: см., Что импорт не хранится нигде.

Ответ 2

Вся хорошая среда IDE автоматически разрешит ваши импорт, только запрос, когда есть конфликт (два пакета с одним и тем же именем класса).

Ответ 3

Поскольку у java.lang есть основные классы языка Java, а java.util, например, нет.

Но некоторые другие языки, такие как Groovy, автоматически импортируют java.util для вас:)

Ответ 4

Я думаю, что идея java.lang заключается в том, что эти классы имеют некоторую связь с языком и временем выполнения, которое является особенным и не может быть реализовано самостоятельно. Примитивные обертки, безопасность и разрешения VM, а также проверка, загрузка пакетов и классов - все, что должно быть встроено в систему Java. Все в java.util, подобно коллекциям, в то время как невероятно полезно, может быть реализовано в чистой Java. Некоторые части его (часовые пояса приходят на ум) даже были реализованы сторонними библиотеками еще лучше.

Или, по крайней мере, это было верным в Java 1.0 дня. Сегодня, например, Iterator также является неотъемлемой частью языка, так как он автоматически используется для каждого цикла, так? Но обратная совместимость всегда была большой вещью с Java, поэтому мы можем жить с этой непоследовательностью навсегда.

Ответ 5

Я столкнулся с конфликтом пространства имен даже с java.lang.System (наше приложение содержит класс с именем System). Явный импорт решает мою проблему, но потребовалось несколько минут, пока я не указал, что com.mycompany.classes.System не импортируется автоматически для идентификатора System by Eclipse, поскольку он уже существует в java.lang.

В любом случае не рекомендуется загрязнять область видимости класса слишком большим количеством идентификаторов, потому что ваш код будет org.classes.**look** com.application.**like** com.classes.**this**.

Автоматическое импортирование java.lang - хорошая идея, поскольку в нем содержатся основные классы и интерфейсы, используемые в java.

Ответ 6

@gameover, Может быть, каждая программа java нуждается в классе, который поступает из java.lang,

но класс java.util содержит класс, который мне нужен или нет, зависит от программиста. Таким образом, у java есть конфигурация по умолчанию для java.lang, но нам нужно импортировать классы java.util в соответствии с нашей программой.

Ответ 7

Пакет java.lang предоставляет базовые классы для встроенных java-программ. Объект является корнем иерархии классов, поэтому для каждого программиста он должен быть доступен, является ли программист новичком или экспертом.

Хотя, если мы говорим о других пакетах, они используются для расширения программ. Например, пакет java.util, который используется только тогда, когда необходимы классы Collection. Хотя в каждой программе классы Collection не используются, тогда как базовые типы данных необходимы для каждой программы Java.

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

Ответ 8

Есть разные причины для того, чтобы стать пакетом java.lang по умолчанию 1) На самом деле, независимо от того, что мы объявляем переменную в java-программе, она будет храниться в объекте, класс Object доступен в java.lang package.it - ​​это суперкласс иерархии классов. Многие из них выполняли операцию в методе класса объектов, например, при программировании потоков. 2) Много раз требуется класс для разработки программы, этот класс доступен в пакете java.lang, Таким образом, необходимо импортировать, когда java-пользователи разработали jdk, это был пакет по умолчанию,

Ответ 9

Автоматический импорт также приводит к некоторой проблеме с памятью, и иногда это может конфликтовать. Например: Тип даты в java и SQL.

Также независимо от того, какие базовые Java-объекты определены в пакете Java.lang. Например: любой тип данных и тип возврата все объявлены в пакете java.lang, поэтому для выполнения какой-либо базовой программы нам также нужен этот пакет.

Ответ 10

Без пакета java.lang разработка не возможна. Но без java.util, java.io или любых других пакетов мы все равно можем написать любое количество программ. По этой причине пакет java.lang импортируется по умолчанию.