2015-06-02 5 views
4

В java, почему для каждого класса обязательным является объявление пакета, которому он принадлежит. Я имею в виду, что пакет hierachy уже описан/применен с использованием структуры файловой системы . Мне кажется, что линия:java обязательное декларирование пакета

package com.mypackage; 

Поскольку первая строка каждого класса является как-то избыточной информацией. Но я уверен, что для этого есть веская причина.

+0

Возможно, вся структура папок избыточна - я не знаю, но я ожидал бы, что компилятор заглянет внутрь файлов для имени пакета и не будет перемещаться по дереву папок, поскольку это может быть очень медленно, когда у вас большой проект с 1000 классами и пакетами. – Darwind

+0

Почему, по вашему мнению, 'пакет' является обязательным? –

ответ

3

Я имею в виду, что пакет hierachy уже описан/применен с использованием структуры папок файловой системы.

Не обязательно. Хотя это, безусловно, хорошая идея организовать свой код таким образом, это не требование. Также имейте в виду, что исходный код не обязательно должен быть в файловой системе.

По существу, я думаю, что вполне разумно сделать исходного файла важной вещью. Черт, вы можете перенести это на другую крайность и предположить, что класс объявлен именем файла - это не просто соглашение, а одно, которое явно является допустимым (в JLS), которое должно выполняться компилятором для общедоступных классов верхнего уровня.

+0

Итак, вы в корне говорите, что JLS позволяет вам размещать все ваши классы в одном файле или в одном каталоге, таким образом, учитывая совместимый компилятор, декартация пакетов не будет излишней? – GionJh

+0

@GionJh: Yup, совершенно. Попробуйте - поместите много файлов Java с разными пакетами в один и тот же каталог, запустите 'javac -d. * .java', и вы обнаружите, что структура пакета будет создана для файлов * class *, но не обязательно должна быть в исходных файлах. С другой стороны, компилятор будет искать классы, о которых не было сказано об исходном файле для использования структуры каталогов. –

+0

Можете ли вы подробнее объяснить вторую часть вашего комментария: «компилятор будет искать классы, о которых не было сказано об исходном файле для использования структуры каталогов»? Спасибо за ваше время. – GionJh

Смежные вопросы