Почему я не могу дать другое имя классу, чем имя файла? - PullRequest
9 голосов
/ 24 декабря 2009

Когда я хочу создать класс Java, он автоматически генерирует файл с тем же именем класса.

Но когда он генерирует класс, он может изменить имя файла, отличное от имени класса. Я что-то упустил?

alt text
(источник: screencast.com )

alt text

Ответы [ 4 ]

9 голосов
/ 24 декабря 2009

Потому что дизайнеры языка так говорят. Это действительно настолько просто. Это соглашение, и они заставляют вас следовать ему.

8 голосов
/ 24 декабря 2009

Цитирование раздела 7.6 Объявления типов верхнего уровня из спецификации языка Java :

Когда пакеты хранятся в файле система (§7.2.1) , хост-система может решить применить ограничение что это ошибка времени компиляции, если тип не найден в файле под имя, состоящее из имени типа плюс расширение (например, .java или .jav) если выполняется одно из следующих условий:

  • На тип ссылается код в других единицах компиляции пакета в котором тип объявлен.
  • Тип объявлен public (и поэтому потенциально доступен из кода в других пакетах).

Это ограничение подразумевает, что должно быть не более одного такого типа в блок компиляции. Это ограничение облегчает компилятор для Язык программирования Java или реализация виртуальной Java машина, чтобы найти именованный класс в пакет; например, исходный код для публичного типа wet.sprocket.Toad будет найден в файле Toad.java в каталоге wet/sprocket, и соответствующий объектный код будет находится в файле Toad.class в тот же каталог.

Когда пакеты хранятся в базе данных (§7.2.2) , хост-система должна не вводить такие ограничения. В На практике многие программисты выбирают поместить каждый класс или тип интерфейса в свой собственный модуль компиляции, будь то или не является публичным или упоминается код в других единицах компиляции.

4 голосов
/ 24 декабря 2009

Спецификация языка сама по себе не диктует это (я только что посмотрел и не могу найти на нее ссылку), но обычно она обеспечивается инструментами. Это значительно облегчает управление зависимостями инструментов, поскольку оно знает, где искать класс B, если на класс A есть ссылка на него. Соглашение распространяется на структуру каталогов, повторяющую структуру пакета, но опять же, это всего лишь соглашение.

1 голос
/ 24 декабря 2009

Если я могу изменить мир, я бы хотел, чтобы дизайнеры c # делали это. Сколько времени можно сэкономить, заставляя парней не создавать файл classes.cs и помещать в него ВСЕ код. Разве это не так, как требование скобок для If. Почему язык заставляет меня делать эту глупость:

if (true)
{

}

вместо

if true
{

}

: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...