可能重复:
Why should the interface for a Java class be prefered?
ArrayList<Integer> al = new ArrayList<Integer>();
List<Integer> l = new ArrayList<Integer>();
这两行之间有什么区别?在任何情况下,是否有任何规则我应该使用前者而不是后者?或者反过来呢?使用特定的优势或缺点是什么?
感谢。
答案 0 :(得分:4)
第一行创建ArrayList
并将其存储在ArrayList
类型的变量中,第二行将其存储在List
类型的变量中。
List
是ArrayList
是一个实现的接口。决定在(List
或特定实现中存储实例的类型,例如ArrayList
)的经验法则是,您应该存储在适合您需要的最广义级别。这意味着,如果您知道该变量必须符合仅由ArrayList
而非List
展示的行为,那么您应该使用ArrayList
,否则,请使用List
。 (这也适用于LinkedList
或其他List
实现
答案 1 :(得分:1)
你之所以想要使用它的第二行,是因为编程接口通常比编写类更好,有时它与良好实践相关,并且最终得到的代码之一是:< / p>
最好测试一下 可以使用不同的实现 它没有耦合到ArrayList
有关详细信息,您可以查看“好莱坞原则”或策略模式