可能重复:
Why should the interface for a Java class be prefered?这两行有什么区别?
ArrayList<Integer> al = new ArrayList<Integer>();
List<Integer> l = new ArrayList<Integer>();
就是这两条线之间的区别?在任何情况下,我是否应该使用前者而不是后来的规则?或者反之亦然?使用特定的优点或缺点是什么?
谢谢。
可能重复:
Why should the interface for a Java class be prefered?这两行有什么区别?
ArrayList<Integer> al = new ArrayList<Integer>();
List<Integer> l = new ArrayList<Integer>();
就是这两条线之间的区别?在任何情况下,我是否应该使用前者而不是后来的规则?或者反之亦然?使用特定的优点或缺点是什么?
谢谢。
第一行中类型的ArrayList
,第二行存储在List
类型的变量的变量创建一个ArrayList
,并将其存储。
List
是其中的一个接口,其中ArrayList
是一个实现。确定哪种类型的实例存储在(List
或具体实现,如ArrayList
)中的经验法则是您应该以最适合您需求的通用级别进行存储。这意味着如果您知道变量必须符合仅由ArrayList
而非一般List
表示的行为,那么您应该使用ArrayList
,否则使用List
。 (这对于LinkedList
或其他List
实现,太)
为什么要使用第二行是因为它通常是更好的方案来比去的类接口的原因,有时它是把好做法,以做到这一点,一个带来的好处是,你最终与代码:
这是更好地测试 可以使用不同的实现 这不是耦合到ArrayList的
欲了解更多信息,你可以看看“好莱坞原则”或策略模式