当用 Java 编程时,我几乎总是出于习惯,写这样的东西:
public List<String> foo() {
return new ArrayList<String>();
}
大多数时候甚至连想都没想。现在的问题是:我应该always指定接口作为返回类型?或者是否建议使用接口的实际实现?如果是,在什么情况下?
显然,使用该界面有很多优点(这就是它存在的原因)。在大多数情况下,库函数使用什么具体实现并不重要。但也许在某些情况下它确实很重要。例如,如果我知道我将主要随机访问列表中的数据,LinkedList
会很糟糕。但如果我的库函数只返回接口,我根本不知道。为了安全起见,我什至可能需要将列表显式复制到ArrayList
:
List bar = foo();
List myList = bar instanceof LinkedList ? new ArrayList(bar) : bar;
但这看起来太可怕了,我的同事可能会在自助餐厅用私刑处死我。这是理所当然的。
你们有什么感想?您的指导方针是什么?您什么时候倾向于抽象解决方案?您什么时候会透露实现细节以获得潜在的性能提升?
返回适当的接口以隐藏实现细节。您的客户应该只关心您的对象提供什么,而不是您如何实现它。如果您从私有 ArrayList 开始,然后决定其他东西(例如 LinkedLisk、跳过列表等)更合适,那么如果返回接口,您可以更改实现而不影响客户端。一旦您返回具体类型,机会就消失了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)