Вопрос о стиле получения / установки Java - PullRequest
6 голосов
/ 08 февраля 2010

У меня вопрос по стилю Java. Я программировал Java годами, но в основном для своих собственных целей, где мне не нужно было сильно беспокоиться о стиле, но у меня просто не было работы, где я должен использовать это профессионально. Я спрашиваю, потому что мне нужно, чтобы люди впервые действительно просмотрели мой код, и я хочу выглядеть так, будто знаю, что делаю. Хех.

Я занимаюсь разработкой библиотеки, которую другие люди будут использовать на моей работе. Способ, которым другой код будет использовать мою библиотеку, по сути, для создания экземпляра основного класса и, возможно, для вызова одного или двух методов. Им не нужно будет использовать ни одну из моих структур данных или любые классы, которые я использую в фоновом режиме, чтобы добиться цели. Я, вероятно, буду основным человеком, который поддерживает эту библиотеку, но другие люди, вероятно, будут время от времени просматривать код.

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

Мой вопрос: будет ли это выглядеть как плохой стиль для других Java-программистов? Должен ли я предоставлять геттеры и сеттеры, даже когда я точно знаю, что будет получать и устанавливать мои поля, и я не беспокоюсь о том, что кто-то еще напишет что-то, что нарушит мой код?

Ответы [ 14 ]

0 голосов
/ 09 февраля 2010

Использование инкапсуляции - хорошая идея даже для закрытого источника, как уже отмечал JacobM.Но если ваш код действует как библиотека для другого приложения, вы не можете помешать другому приложению получить доступ к классам, которые определены для внутреннего использования.Другими словами, вы не можете (?) Применять ограничение, согласно которому открытый класс X может использоваться только классами в моем приложении.

Здесь мне нравится архитектура плагинов Eclipse, где вы можете сказать, какие пакеты в моем плагине могут зависеть от подключаемых плагинов во время выполнения.JSR 277 была нацелена на внедрение такого рода модульных функций в JDK, но сейчас она мертва.Подробнее об этом читайте здесь, http://neilbartlett.name/blog/2008/12/08/hope-fear-and-project-jigsaw/

Теперь, похоже, единственным вариантом является OSGi.

0 голосов
/ 09 февраля 2010

Иногда я использую public final свойства без get / setter для недолговечных объектов, которые просто переносят некоторые данные (и никогда больше ничего не сделают по проекту).

Когда-нибудь я был бы очень рад, если бы в Java подразумевались геттеры и сеттеры, созданные с использованием ключевого слова property ...

0 голосов
/ 09 февраля 2010

Я считаю, что геттеры и сеттеры - лучший способ программирования, и дело не только в соглашении о кодировании. Никто не знает будущего, поэтому сегодня мы можем написать простой строковый номер телефона, но завтра нам может понадобиться поставить «-» между кодом города и номером, в этом случае, если у нас определен метод getPhonenumber (), мы можем такие украшения очень легко. Так что я думаю, нам всегда следует придерживаться этого стиля кодирования для лучшей расширяемости.

0 голосов
/ 08 февраля 2010

Несмотря на то, что это болезненно, кодирование свойств с помощью геттеров и сеттеров является большой победой, если вы когда-либо собираетесь использовать свои объекты в контексте, таком как JSP (в частности, язык выражений), OGNL или другой язык шаблонов. Если ваши объекты следуют старым добрым соглашениям Бина, тогда многие вещи «просто сработают» позже.

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