Я нахожусь в процессе чтения Code Complete, и ближе к концу книги, в главе о рефакторинге, автор перечисляет несколько вещей, которые вы должны сделать, чтобы улучшить качество вашего кода при рефакторинге.
Одним из его пунктов было то, что всегда возвращает как можно более конкретные типы данных , особенно при возврате коллекций, итераторов и т. Д. Итак, как я понял, вместо возврата, скажем, Collection<String>
, вы должны вернуть HashSet<String>
, если вы используете этот тип данных внутри метода.
Это смущает меня, потому что звучит так, будто он призывает людей нарушить правило сокрытия информации. Теперь я понимаю это, когда говорю о методах доступа, это очевидный случай. Но когда при расчете и распределении данных, а уровень абстракции метода не подразумевает прямой структуры данных, я считаю, что лучше всего возвращать как можно более абстрактный тип данных , пока данные не падают. кроме (я бы не возвратил Object
вместо Iterable<String>
, например).
Итак, мой вопрос: Есть ли более глубокая философия за рекомендацией Code Complete всегда возвращать как можно более конкретный тип данных и разрешать даункастинг, вместо того, чтобы поддерживать необходимость в знаниях? что я просто не поняла?