java为什么有些人使用List基类来实例化新的ArrayList?
我经常遇到这样的代码:人们实例化一个新的ArrayList并将其分配给List接口,如下所示:
List<String> names = new ArrayList<String>();
这种方法背后的原因是什么
你可以在下面搜索框中键入要查询的问题!
我经常遇到这样的代码:人们实例化一个新的ArrayList并将其分配给List接口,如下所示:
List<String> names = new ArrayList<String>();
这种方法背后的原因是什么
# 1 楼答案
这是“四人帮”(GoF)的一个节目。 为什么
你用抽象的契约来指导,而不是具体的实施
你想要
LinkedList
实现,而不是ArrayList
实现,怎么样? 这样,只需将该属性注入setter即可抽象是关键,你对实现一无所知,只知道规范的指导
读这个What does it mean programming to an interface?
# 2 楼答案
这样的代码不使用
List
类,而是将变量声明为List
类型。这叫做abstractionList
是一个接口,它定义了实际类有哪些方法,而不指定使用了哪个实际类虽然这不是什么大事,但这种做法可能非常重要,在更复杂的情况下甚至是必不可少的。始终遵循这种模式是很好的做法
# 3 楼答案
这样,您就可以针对接口
List
编写代码,这使得将来在必要时切换实现变得很容易在这种情况下,以下内容就足够了:
现在,如果你做以下事情-
您将针对实现
ArrayList
本身进行编码。您的代码与特定的实现相关联。如果必须切换实现,则需要大量代码更改查看docs以了解Java 6提供的一些标准实现
# 4 楼答案
将代码与接口的特定实现分离
这也有助于您将来转移到
List
接口的另一个实现例如:
你有
List<String> names = new ArrayList<String>();
后来你决定你应该使用List
接口的其他实现,比如LinkedList
,所以你只需要把它改成List<String> names = new LinkedList<String>();
,什么都不会坏