为什么 Java 类的接口应该是首选?

2022-08-31 12:36:32

PMD 将报告以下违规行为:

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

违规行为是“避免使用像'ArrayList'这样的实现类型;请改用接口”。

以下行将更正冲突:

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

为什么要使用后者而不是?ListArrayList


答案 1

在具体类型上使用接口是良好封装和松散耦合代码的关键。

在编写自己的 API 时,最好遵循这种做法。如果这样做,您稍后会发现,向代码中添加单元测试(使用 Mocking 技术)以及将来需要更改基础实现会更容易。

这是一篇关于这个主题的好文章

希望它有帮助!


答案 2

这是首选,因为您将代码与列表的实现分离。使用该接口,您可以轻松地将实现(在本例中为 ArrayList)更改为另一个列表实现,而无需更改代码的任何其余任何部分,只要它仅使用 List 中定义的方法即可。