在大多数使用集合的Java代码中,我都会看到类似的内容。
List<String> list = new ArrayList<String>();
但我总是想知道为什么它比
更受欢迎ArrayList<String> = new ArrayList<String>();
我研究了一下但是不能理解很多。
答案 0 :(得分:10)
因为通过其界面使用对象时,您可以稍后更改实现。例如:
public ArrayList<String> doSomething(..) {
...
return arrayList;
}
但过了一段时间后,ArrayList
对于此方法的调用者主要使用的内容效率低下,因此您决定将其更改为LinkedList
。
List
,那么ArrayList
,您应该转到调用该方法的所有位置并更改它。如果有人使用某些特定于arraylist的方法会怎样 - 你必须考虑如何重构它。这是一个很好的方案。如果您的代码是库,而其他分支机构/公司正在使用它,您可能会遇到效率低下的代码。另见:
答案 1 :(得分:2)
嗨,这是使用界面对象
的好处http://artofsoftwarereuse.com/2010/04/24/5-advantages-of-using-interfaces-for-reusable-assets/
答案 2 :(得分:1)
鉴于Java是一种强类型语言,因此对接口进行编程始终被认为是最佳实践(当然,在合理范围内)。这样做可以让您稍后更换实现。
对于方法参数尤其如此,因为它不会将您绑定到特定实现。也许您在一个案例中使用ArrayList
,但在其他地方使用LinkedList
。