如何将列表转换为他们的conrecte实现?

sor*_*ist 2 java

假设我使用的是一个我不知道源代码的库.它有一个返回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那么是否会出现某种类型的差异?

Kep*_*pil 6

不,这不是一个好主意.List除非由于某种原因需要特定的行为,否则应始终使用interface()来声明列表变量ArrayList.
此外,如果你这样做,你需要确定返回的列表是一个ArrayList.在这种情况下,承诺的合同getObjs()只是返回类型是某种类型List,所以你不应该假设其他任何东西.即使List现在返回ArrayList,也没有什么能阻止实现者getObjs()稍后更改List返回的类型,这会破坏你的代码.