我应该何时返回接口,何时返回具体类?
2022-09-01 14:53:07
在用Java编程时,我几乎总是出于习惯,写这样的东西:
public List<String> foo() {
return new ArrayList<String>();
}
大多数时候甚至没有想到它。现在的问题是:我应该始终将接口指定为返回类型吗?或者建议使用接口的实际实现,如果是,在什么情况下?
很明显,使用界面有很多优点(这就是为什么它在那里)。在大多数情况下,库函数使用什么具体实现并不重要。但也许在某些情况下它确实很重要。例如,如果我知道我将主要随机访问列表中的数据,那么a将很糟糕。但是如果我的库函数只返回接口,我根本不知道。为了安全起见,我甚至可能需要将列表显式复制到:LinkedList
ArrayList
List bar = foo();
List myList = bar instanceof LinkedList ? new ArrayList(bar) : bar;
但这似乎很可怕,我的同事可能会在自助餐厅用私刑处死我。这是理所当然的。
你们怎么看?您的准则是什么,您何时倾向于抽象解决方案,以及何时透露实施细节以获得潜在的性能提升?