kin*_*sia 12 java optimization list
我正在创建一个供人们使用的库,但为什么我的方法应该返回List而不是ArrayList?
因为如果用户知道真实类型是一个ArrayList,他将在循环中使用accessor []而不是迭代器,但如果他不知道他将使用迭代器.
对于LinkedList的相同问题,如果返回类型是List,则他将无法使用正确的访问者.
我对吗?
ipa*_*lic 20
返回List将使您的库的用户可以使用实现List接口的任何内容,而使用ArrayList将强制他们使用ArrayList.
如果将来您作为库创建者决定更改您的内部实现,那么更改将通过库的通用接口从最终用户隐藏.
因为您的库的用户永远不会知道您在内部使用ArrayList.
例如,假设您返回一个ArrayList,很多人已经开始使用您的库.现在,如果您突然意识到LinkedList更适合您的目的,那么您将破坏目前使用您的代码的所有人的兼容性.
这就是编写接口而不是实现的代码总是更好的原因,当您编写专门用于重用的代码时更是如此.接口(在本例中为List)充当代码与客户端代码之间的契约.它告诉他们你的代码做什么(接口),而不告诉他们它是如何做的(通过不暴露实现).
如果可能的话,返回一个接口(或者失败的超类?).这样,如果覆盖,该方法可以具有更广泛的应用.这可能会阻止某些特定于类的方法在返回的对象上可用,但是没有什么能阻止程序员获取List
数据并将其复制到Collection
他们喜欢使用的任何内容.
List myList = new MyLibrary().getList();
ArrayList myArrayList = new ArrayList(myList);
LinkedList myLinkedList = new LinkedList(myList);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4809 次 |
最近记录: |