-3

我使用这两个语句来定义 ArrayList:

ArrayList<String> my = new ArrayList<>();
List<String> my2 = new ArrayList<>();

我应该使用哪一个?

4

3 回答 3

3

使用您的第二个定义,您可以稍后将 ArrayList 构造函数替换为另一种类型的列表,例如 LinkedList 或高性能列表,或将来可能存在的任何其他类型的列表。在您的第一个定义中,您永远与 ArrayList 实现相关联。您无法更改它,因为您的代码的其余部分相信此引用是明确的 ArrayList。

相反,通过使用接口,您的代码依赖于接口的契约,而不是特定实现(如 ArrayList)。这使您能够在不影响其用户的情况下更改实现。改变是我们必须促进和提前计划的事情,仅仅是因为我们无法阻止事情发生变化。

于 2013-02-19T16:28:10.180 回答
1

后者。对接口进行编程,而不是对实现进行编程。

于 2013-02-19T16:27:25.673 回答
1

取决于你需要什么。如果可能,通常建议使用接口(因此是列表),否则你会坚持使用实现类。比如说,您使用 ArrayList 作为某些方法的输入参数。出于某种原因(例如性能),您决定在某个时候从 ArrayList 切换到 LinkedList。因此,您还必须更改输入参数的类型。如果您使用接口(List),您可以更自由地切换实现,而无需重构代码。

于 2013-02-19T16:30:42.053 回答