8 ответов:
У Java был интересный подход-где предоставление программисту выбора может только ухудшить опыт программирования, удалить выбор.
Они сделали это в нескольких местах. Имена файлов и пакеты наверняка, но также не позволяют использовать несколько общедоступных классов в файле (никогда не хорошо), не позволяя вам разделять классы между файлами (чертовски трудно работать!), прием.
Я действительно хотел бы, чтобы они пошли немного дальше. Нет никаких причин для публичных переменных-я никогда нужен один, и я никогда не видел ситуации, когда какой-то умный программист думал, что он нужен и на самом деле прав.
Я также не возражал бы видеть ограничения на размер метода/класса, но это может быть схематично (это может быть легко реализовано с помощью code checkers, проблема, как правило, заключается в том, что компании, которые нуждаются в наибольшей помощи, не знают, что им нужна помощь, и поэтому не используют такие инструменты, как Code checkers).
Это не то, что имеет значение для большинства малых но когда ваша команда растет и имеет несколько сайтов с консультантами из Индии, Китая и различных других мест по всему миру, вы начнете ценить негибкость.
в ответ на комментарий сеттеров / геттеров:
Java beans были мерзостью, созданной Borland, чтобы взломать их графический интерфейс, а затем переоборудован в Java.
ужасная идея -- отвлечение от программирования OO -- геттеры и сеттеры A) показывают слишком много вашей реализации и B) делают вас подумайте в терминах работы с данными из другого объекта, а не просить другой объект выполнить операцию для вас. Плохой хак для людей, которые еще не могут думать в ОО.
геттеры необходимы иногда, но не должны быть добавлены, если не видно, что это абсолютно неизбежно.
сеттеров следует избегать любой ценой. Если вам абсолютно необходимо внешне изменить состояние после создания объекта, попробуйте использовать шаблон builder и защитить ваши сеттеры от того, чтобы быть вызывается после выполнения любой операции.
очевидно, что есть исключения для всего, и многие "геттеры" на самом деле являются критической объектной бизнес-логикой, такой как String.length (), который потребуется независимо от того, как была реализована строка, и даже не реализуется, просто возвращая свойство-отличный случай для "Геттера", если вы даже хотите это назвать.
Я хотел сказать, что это просто должны. Но я посмотрел на JLS, и это не так строго. С точки зрения JLS компилятору остается выбрать, устанавливать ли такое ограничение или нет.
практически разговорный-общие компиляторы имеют это ограничение, и, как уже объяснялось, компилятору гораздо проще найти блок компиляции или для загрузчика классов найти файл класса с таким ограничением в место.
чтобы быть более конкретным, имя файла shoud имеет то же имя, что и имя общедоступного класса в этом файле. это способ сказать JVM, что это то, что точка входа для вас.
каждый открытый класс должен быть в файле, где имя файла соответствует имени класса и пакет, где имя пакета представляет структуру каталогов, написанную в пунктирной форме (косые черты становятся точками, как com/пример/приложение становится com.образец.приложение.)
Это соглашение не является случайным. Компилятор должен быть в состоянии найти исходные файлы и загрузчик классов должен быть в состоянии найти реализацию. Сопоставление имен пакетов и классов делает это очень простым и, более важно, быстро.
настоящее соглашение не применяется к непубличным классам. Это связано с тем, что непубличные классы имеют очень ограниченную видимость и могут использоваться только в пакете, где они определены. Таким образом, в обоих случаях компилятор и среда выполнения уже расположены нужные файлы.
вопрос-А как это работает в случае с C++, где нет такого ограничения?-
А. не работа. У вас должен быть makefile. Вам не нужен один в Java.
Это полезно в определении класса. т. е. предположим, что разрешены разные имена файлов, и если вы создали экземпляр класса, то компилятор должен искать класс во всех файлах вместо этого, если имена файлов совпадают с именами класса, производительность поиска и использования класса увеличивается. У них могут быть и другие причины.
пока он не является публичным имя класса может отличаться от имени файла. Класс также может иметь метод main. Файл класса будет создан с именем класса, но не с именем исходного файла. Имя класса должно использоваться для его выполнения.
причина: класс по умолчанию является частным пакетом, поэтому javac не должен находить этот исходный файл этого компилятора для какой-либо другой программы java из-за пределов пакета.
Comments