为什么要升级List对象? Android / Java语法

时间:2013-07-09 03:59:22

标签: java android collections upcasting

我最近一直在阅读许多Android项目的代码,以获得更多的理解。我看到的一件事是ArrayList实例化的两种方式的区别。

请注意此处显示的这两个示例。为什么有些人使用示例1,为什么你会在例2中做到这一点,它们之间的主要区别是什么?

我理解Java中的向上转换和向下转换的概念,并且在这种特定情况下看不到任何优势。如果你要创建一个arrayList,为什么不从头开始将它存储在一个ArrayList变量中呢?

我一直使用示例2的方式创建一个新的ArrayList。我不明白使用示例1中显示的内容有什么好处

看起来更多程序员使用示例1方式

示例1,使用向上转换为父变量

  List<String> list = new ArrayList<String>();

示例2

  ArrayList<String> list = new ArrayList<String>();

1 个答案:

答案 0 :(得分:1)

List接口,因此无法实例化它。您必须使用ArrayList等具体实现进行实例化。

是否完全使用ListArrayList取决于使用它的上下文。

如果你想要一个ArrayList,你应该用ArrayList实例化它,不过


上传通常是为了方法的可重用性而进行的,通常是自动完成的。

考虑使用此方法对列表进行排序

public void sort(ArrayList lst);

您只能通过此方法对ArrayList进行排序。因此,如果要对LinkedList对象进行排序,则必须使用LinkedList参数创建另一个方法

现在考虑这个方法

public void sort(List lst);

您现在可以通过传递实现List接口的类的对象来重用此方法。因此,您现在可以对ArrayListLinkedListStackVector进行排序使用相同的方法。因此,您现在正在重复使用相同的方法来对实现List接口的不同类进行排序