Получает ли получатель с другим типом возвращаемого значения получатель? - PullRequest
1 голос
/ 17 марта 2012

У меня есть переменная с именем

List<String> names;

если у меня есть метод, подобный

Iterator getNames() { return names.iterator(); }

Технически это все еще метод получения, потому что я изменил его на Iterator?

Ответы [ 4 ]

4 голосов
/ 17 марта 2012

Несмотря на то, что JDK допускает это, это не очень хорошая идея.

С одной стороны, существуют соглашения, основанные на именовании ваших методов, которые имеют некоторые зависимости от них.

  1. Объекты JavaBean используют методы получения и установки для установки свойств компонента.Если они не подчиняются соглашению, программа потерпит неудачу.См. Спецификация JavaBeans, раздел 8.3.1

  2. Объекты JSON - класс JSONObject использует методы доступа в конструкторе.См .: http://www.json.org/javadoc/org/json/JSONObject.html#JSONObject(java.lang.Object)

  3. Некоторые реализации JPA будут некорректно обрабатывать ваши классы сущностей, если у них есть несколько получателей с одинаковым именем, но разными типами возврата.

IСпорим, что существует больше зависимостей, но даже если они не применимы к вашему решению, все же разумно следовать соглашению ради удобочитаемости.Вы не хотите, чтобы какой-то другой разработчик ругал вас когда-нибудь в будущем за нарушение стандартов:)

2 голосов
/ 17 марта 2012

Если ваш класс будет подвергнут интроспекции некоторым бобовым инструментом, getNames () должна вернуть именаДля ясности назовите это так:

getNamesIterator();
2 голосов
/ 17 марта 2012

Это кажется мне плохой идеей с точки зрения дизайна.

Я бы просто получил геттер public List<String> getNames().

Для «безопасной публикации» следует рассмотреть возможность возврата копии списка в реализации:

public List<String> getNames() {
    return new ArrayList<String>(names);
}
1 голос
/ 17 марта 2012

Вы думаете иначе.Метод вида getXxx является геттером.Соглашения Java не подразумевают, что у вас должно быть поле с именем xxx.Это ваш класс бизнеса, и инкапсуляция обеспечивает только: возможность скрыть ваши структуры данных для других классов.

Извините за опечатку, мобильный ...

...