我正在阅读 Code Complete,在本书的最后,在关于重构的章节中,作者列出了一些你应该做的事情,以在重构时提高代码的质量。
他的观点之一是始终尽可能返回特定类型的数据,尤其是在返回集合、迭代器等时。所以,正如我所理解的那样,如果你使用那种数据类型,而不是返回,比如说Collection<String>
,你应该返回HashSet<String>
方法里面。
这让我很困惑,因为这听起来像是他在鼓励人们打破信息隐藏的规则。现在,我在谈论访问器时理解了这一点,这是一个明确的案例。但是,在计算和修改数据时,方法的抽象级别意味着没有直接的数据结构,我发现最好尽可能返回抽象的数据类型,只要数据不分崩离析(我不会例如,返回Object
而不是Iterable<String>
)。
所以,我的问题是: Code Complete 的建议背后是否有更深层次的哲学,即始终返回尽可能具体的数据类型,并允许向下转换,而不是保持我刚刚不理解的需要知道的基础?