假设我使用的是一个我不知道源代码的库.它有一个返回List的方法,如下所示:
public List<SomeObj> getObjs() { ... }
Run Code Online (Sandbox Code Playgroud)
我想知道这是不是一个好主意:
ArrayList<SomeObj> objs = (ArrayList<SomeObj>) getObjs();
Run Code Online (Sandbox Code Playgroud)
例如,如果getObjs()中的List的具体实现是a,LinkedList那么是否会出现某种类型的差异?
不,这不是一个好主意.List除非由于某种原因需要特定的行为,否则应始终使用interface()来声明列表变量ArrayList.
此外,如果你这样做,你需要确定返回的列表是一个ArrayList.在这种情况下,承诺的合同getObjs()只是返回类型是某种类型List,所以你不应该假设其他任何东西.即使List现在返回ArrayList,也没有什么能阻止实现者getObjs()稍后更改List返回的类型,这会破坏你的代码.
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |