Достоинства/Причины для использования “добираются” как префикс от имени метода доступа

Вы имеете в виду кроме усмешки самодовольно, когда я могу сделать в десяти строках, что берет кодер MFC 300? Я предполагаю, что моя самая большая жалоба на мой собственный код является взрывом средств доступа; следующая дизайнерская работа, которую я делаю, я принялся проблема использования самого маленького количества свойств.

7
задан bgw 8 October 2009 в 22:13
поделиться

6 ответов

префикс «get» (или «is» для методов, возвращающих логические значения) является частью спецификации JavaBean , которая используется во всем java, но в основном в представлениях в веб-интерфейсе пользователя.

length () и size () - это исторические артефакты с доявабийских времен; многие разработчики пользовательского интерфейса сетовали на то, что в Collection есть метод size () вместо getSize ()

8
ответ дан 6 December 2019 в 06:37
поделиться

Префикс get особенно полезен, если у вас также есть set , add , ] remove и т. д. методы. Конечно, обычно лучше иметь интерфейс, заполненный get s или полный set s. Если почти каждый метод имеет get , тогда он просто превращается в шум. Итак, я бы отбросил get для неизменяемых и набор для строителей. Для «фундаментальных» типов, таких как коллекции и строки, эти словечки тоже зашумлены, IMO.

5
ответ дан 6 December 2019 в 06:37
поделиться

The get/set conventions stem from the java Bean specification. So people strongly tend to use that.

And the .size(), .length(), and even .length attribute of arrays are all examples of Java's failures to follow its own conventions. There are many more, it's "fun" to discover them!

4
ответ дан 6 December 2019 в 06:37
поделиться

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

Возможно, имеет смысл сказать:

String txt="I have " + car.GetFuelLevel() + " liters of petrol.";

или ...

String txt="I have " + car.FuelLevel + " liters of petrol.";

, но не ...

String txt="I have " + car.FuelLevel() + " liters of petrol.";

I значит, нет смысла говорить: «Эй, машина. Иди за меня на FuelLevel». Но чтобы сказать: «Эй, машина. Иди за меня GetFuelLevel». Это более естественно.

Итак, почему они сломали рейтинг с помощью String.length () и других? Меня это тоже всегда беспокоило.

7
ответ дан 6 December 2019 в 06:37
поделиться

They may be failures to the specification, however they improve readability. size and length allow you to read the following line of code:

for (int i=0; i<thing.size(); ++i){ 

As...

While i is less than the thing's size...

There's no real convention behind this, but it does make it easier to translate into a sentence directly.

2
ответ дан 6 December 2019 в 06:37
поделиться

Историческая причина заключалась в том, что в спецификации JavaBean указывалось, что средства доступа к свойствам класса должны выполняться с помощью getPropertyName / setPropertyName. Преимущество заключалось в том, что вы могли затем использовать API интроспекции для динамического перечисления свойств объекта, даже того, который вы ранее не скомпилировали в свою программу. Примером того, где это было бы полезно, является создание архитектуры подключаемого модуля, которая должна загружать объекты и предоставлять пользователю доступ к свойствам объекта.

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

1
ответ дан 6 December 2019 в 06:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: