2012-09-28 57 views
1

可能重复:
ArrayList declaration JavaArrayList的声明

在Java中,为什么一个ArrayList经常使用列表中声明?

List<String> strList1 = new ArrayList<String>(); 
ArrayList<String> strList2 = new ArrayList<String>(); 

我无法理解这两者之间的区别。这个比那个好吗?或有特定用途?

回答

5

ArrayList类实现List接口。

声明接口类型的对象通常是一种很好的做法,并且当然使用该接口的实现来实例化它。

这样,您可以在需要时更改实现,但声明的类型保持不变。这样,您可以避免修改太多代码,特别是在获取变量作为参数的方法中。该方法不断获取List作为参数,而不是某个实现。

1

这里的想法是,你正在设计的接口,而不是具体的对象本身。接口更加灵活,因为如果您愿意或需要,您可以稍后将strList1替换为LinkedList

1

Liscov Substitution Principle

可替代性在面向对象编程的一个原则。它指出,在一个计算机程序中,如果S是T的一个子类型,那么类型T的对象可以用类型S的对象代替(即,类型S的对象可以代替类型T的对象),而不改变任何该程序的理想属性(正确性,执行的任务等)。

ArrayListList的子类型。

4

在Java中,接口中使用List,而ArrayList是实现该接口的几个类之一。第一个符号的优点是,您可以轻松更改您使用的实现,而无需更改代码的其余部分。例如,你可能以后决定,而不是使用一个ArrayList Vector的,所以你可以只改变代码看起来像:

List<String> strList1 = new Vector<String>(); 
1

它不是格外这个问题,但它始终是推荐使用的界面,而可以让您在任何需要的时候改变执行方式。 例如,您可以随时将其更改为链接列表

1

当您将代码与接口绑定时,可以在需要时非常轻松地更改实现类。

如果您通过具体类来编写代码,那么您可以通过将代码绑定到该类来使用特定于该类的功能。而未来的更换变得困难。

要更好地理解该功能,请考虑来自第三方的课程。您不需要依赖任何特定供应商的代码。您可以随时将课程更改为不同的供应商。两者都受界面的约束,所以更改很容易。

1

我认为,基本上,以前的答复是说你可以向Listcast上传一个ArrayList或另一个也实现List接口的对象。