Во-первых, я не Java-парень, но я наткнулся на то, что на первый взгляд кажется несовместимым с тем, как работает импорт.
Допустим, у вас есть файл, и в этом файле у вас есть основная функция, и вы также определили класс Foo , теперь в пакете также существует другая реализация Foo . Предположим, вы хотите использовать обе версии в своей функциональности.
Вы не можете явно импортировать Foo из его пакета, т.е. import mypackage.Foo;
Поскольку это приведет к конфликту с классом, определенным локально в файле, во время компиляции будет сгенерирована ошибка.
Что вы можете сделать - это импортировать весь пакет, т.е. импортировать mypackage. *;
Это будет работать, и вы можете получить доступ к Foo , используя полное имя, при использовании простого имени будет использоваться локальный Foo .
Несоответствие, которое я вижу, состоит в том, что, хотя первый генерирует ошибку (вы импортировали класс, и единственной целью импорта является возможность использовать простое имя, а не полное имя), последнее даже не приводит к предупреждению .
Я бы подумал, что в обоих случаях будет выдано предупреждение, т. Е. Вы можете использовать неправильный класс, поскольку он определен в 2 местах, или оператор import является избыточным, поскольку использование простого имени разрешит локально определенный класс, не импортированный.
Итак, мой вопрос: есть ли основная причина, по которой он реализован таким образом?
Да, это случай выброса, я это понимаю.