将通用列表初始化为ArrayList
问题的原因是开发人员通常使用ArrayList,并将其声明为List类型,以便在代码中具有更大的灵活性。这样做的目的是为了使代码更具可扩展性,并且可以更轻松地切换不同的实现。由于使用List作为类型不会将代码绑定到仅在ArrayList上可用而在LinkedList上不可用的方法上,因此可以随意更改实现。
解决方法是始终使用高级别的类或接口作为类型声明,以便在代码中使用更通用的方法和功能。如果在代码中使用特定实现类的方法,可能需要更改代码以适应不同的实现。但是,如果始终使用接口,就不会使用特定实现类的方法,因此可以轻松切换不同的实现。
这在编写API时尤其重要。如果方法是公开可访问的并且将被其他开发人员使用,那么需要确保不限制方法接受的列表类型,除非有很好的理由这样做。因为其他开发人员可能有不想使用ArrayList的好理由。
如果仅进行迭代、添加和删除操作,甚至可以使用更高级别的Collection接口。这样做可能会丧失一些上下文信息,因为List接口告诉你它可能包含重复项并且是手动排序的。但是如果这不是特别重要,并且可以使用Collection接口,甚至可以将列表替换为Set接口的实现。
感谢详细的回答,解决了我所有的疑问。