将通用列表初始化为ArrayList

13 浏览
0 Comments

将通用列表初始化为ArrayList

我在StackOverflow上读到这样一个说法:

List foo = new ArrayList();

是ArrayList初始化的最佳实践。而这样写:

ArrayList foo = new ArrayList();

应该避免使用。这是正确的吗?如果是,请有人解释一下为什么。

谢谢,

EG

0
0 Comments

问题的原因是开发人员通常使用ArrayList,并将其声明为List类型,以便在代码中具有更大的灵活性。这样做的目的是为了使代码更具可扩展性,并且可以更轻松地切换不同的实现。由于使用List作为类型不会将代码绑定到仅在ArrayList上可用而在LinkedList上不可用的方法上,因此可以随意更改实现。

解决方法是始终使用高级别的类或接口作为类型声明,以便在代码中使用更通用的方法和功能。如果在代码中使用特定实现类的方法,可能需要更改代码以适应不同的实现。但是,如果始终使用接口,就不会使用特定实现类的方法,因此可以轻松切换不同的实现。

这在编写API时尤其重要。如果方法是公开可访问的并且将被其他开发人员使用,那么需要确保不限制方法接受的列表类型,除非有很好的理由这样做。因为其他开发人员可能有不想使用ArrayList的好理由。

如果仅进行迭代、添加和删除操作,甚至可以使用更高级别的Collection接口。这样做可能会丧失一些上下文信息,因为List接口告诉你它可能包含重复项并且是手动排序的。但是如果这不是特别重要,并且可以使用Collection接口,甚至可以将列表替换为Set接口的实现。

感谢详细的回答,解决了我所有的疑问。

0
0 Comments

Generic List初始化为ArrayList的原因是为了在以后的时间内可以灵活地更改实现,并且对客户端的影响最小。

解决方法就是使用接口而不是具体的实现类来声明变量。例如,可以将ArrayList更改为LinkedList,但是如果客户端使用接口方法,它的影响将是最小的。

具体的代码示例如下:

List<String> tempList = new LinkedList<String>();

0
0 Comments

问题的出现原因:

- 在代码中使用了List作为参数类型,这是一种设计上的决策,目的是为了使代码更加灵活,可以接受不同的实现方式。

解决方法:

- 使用ArrayList作为List的实现方式:

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

0