为什么有些人使用List基类来实例化一个新的ArrayList?

S-K*_*-K' 8 java

我不断遇到代码,人们实例化一个新的ArrayList并将其分配给List接口,如下所示:

List<String> names = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

这种方法背后的原因是什么?

JHS*_*JHS 18

将代码与接口的特定实现分离.

这也有助于您List将来转移到界面的另一个实现.

例如 -

List<String> names = new ArrayList<String>();以后你决定,你应该使用一些其他的实现的List接口,说LinkedList所以你只能将其更改为List<String> names = new LinkedList<String>();并没有什么休息时间.

  • `Vector`是一个遗留的,过时的,丑陋的,讨厌的类,不应再使用了. (6认同)

nac*_*okk 4

对接口编程,而不是实现

这是四人帮 (GoF) 的设计模式。这是为什么?

您通过抽象契约而不是具体实现进行指导。

public class MyClass {

    private List myList ;

    public setMyList(List list){
        myList=list;
    }

}
Run Code Online (Sandbox Code Playgroud)

ArrayList您想要实施而不是实施怎么样LinkedList?这样你只需要用 setter 注入该属性。

抽象是关键,你对实现一无所知,只能通过规范来指导。

阅读本文接口编程是什么意思?