为什么要选择Java类的接口?
PMD将报告违规行为:
ArrayList<Object> list = new ArrayList<Object>();
违规是“避免使用像'ArrayList'这样的实现类型;使用接口来代替”。
以下行将纠正违规行为:
List<Object> list = new ArrayList<Object>();
为什么要用List
代替ArrayList
?
在具体类型上使用接口是良好封装和松散耦合代码的关键。
在编写自己的API时遵循这种做法甚至是一个好主意。 如果你这么做了,你会发现后面会更容易地向你的代码中添加单元测试(使用Mocking技术),并在将来需要时改变底层实现。
这是一篇关于这个主题的好文章。
希望能帮助到你!
这是首选,因为您将代码从列表的实现中分离出来。 使用这个接口可以让你轻松地将实现ArrayList(在这种情况下)更改为另一个列表实现,而无需更改其余任何代码,只要它只使用List中定义的方法即可。
总的来说,我同意将接口从实现中解耦是一件好事,并且会使代码更易于维护。
但是,您必须考虑一些例外情况。 通过接口访问对象会增加额外的间接层,这会使代码变慢。
对于我的兴趣,我运行了一个实验,对一百万长度的ArrayList产生了100亿次顺序访问。 在我的2.4Ghz MacBook上,通过List接口访问ArrayList的平均时间为2.10秒,当声明ArrayList类型时平均花费1.67秒。
如果您正在处理大型列表,深入内部循环或经常调用的函数,那么需要考虑这一点。
链接地址: http://www.djcxy.com/p/57285.html上一篇: Why should the interface for a Java class be preferred?