Почему 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
импортируется по умолчанию.