首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么应该首选Java类的接口?

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

Stack Overflow用户
提问于 2008-09-29 04:02:56
回答 8查看 28.9K关注 0票数 80

PMD将针对以下情况报告违规:

代码语言:javascript
复制
ArrayList<Object> list = new ArrayList<Object>();

违规是“避免使用像‘ArrayList’这样的实现类型;使用接口来代替”。

下面这一行可以纠正违规行为:

代码语言:javascript
复制
List<Object> list = new ArrayList<Object>();

为什么应该使用带有List的后者而不是ArrayList

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-09-29 04:20:13

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

在编写您自己的API时,遵循这种做法甚至是一个好主意。如果您这样做了,您稍后会发现向代码中添加单元测试(使用模拟技术)以及在将来需要时更改底层实现会更容易。

这是一个关于这个主题的good article

希望它能帮上忙!

票数 81
EN

Stack Overflow用户

发布于 2008-09-29 04:04:28

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

票数 33
EN

Stack Overflow用户

发布于 2008-09-30 01:06:42

总的来说,我同意将接口与实现分离是一件好事,这将使您的代码更易于维护。

但是,您必须考虑一些例外情况。通过接口访问对象会增加额外的间接层,这会使代码变慢。

出于兴趣,我运行了一个实验,生成100亿次对100万个长度的ArrayList的顺序访问。在我的2.4 the上,通过列表接口访问ArrayList平均需要2.10秒,当声明它为ArrayList类型时,平均需要1.67秒。

如果您正在处理大型列表,深入内部循环或频繁调用函数,则需要考虑这一点。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/147468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档